)]}'
{
  "log": [
    {
      "commit": "4d71e55eb7616b2f2dc6f39377be72fdfbf01b2a",
      "tree": "26ca50a97736ef59b2ad3a867c0ae377209f092c",
      "parents": [
        "e2d24beb1a9d9b718b0443b1eec63090c6fc19a4"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Jul 01 16:06:14 2019 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jul 02 11:19:22 2019 +0000"
      },
      "message": "Remove ShadowFrame::HasReferenceArray()\n\nIt is always true.\n\nChange-Id: I96ddeeb87b8166d0fc08edafd1800b539eec3a7d\n"
    },
    {
      "commit": "8d335b61d637fa9b040eb9d559dbac98067467f1",
      "tree": "732fe4de2a4784493b4affb1b96aa018ce729c98",
      "parents": [
        "41249cd548d60d72b94532b00a261332451fd6f2"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Jun 06 14:25:42 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Jun 26 09:27:15 2019 +0000"
      },
      "message": "Switch-interpreter: Refactor exception handling.\n\nMove exception handling code to the main loop.\n\nThe byte-code handlers must return false if there is an exception,\nand the main loop will then handle it in the common slow-path.\n\nThis allows us to remove the remaining helper macros,\nand it shrinks the interpreter uber-function by ~10%.\n\nTest: test.py -b -r --host --64 --interpreter\nTest: run-libjdwp-tests.sh --mode\u003dhost --variant\u003dX64 --debug --no-jit\nChange-Id: I38e9b31e33c609db800065c16df77023bea7c2e5\n"
    },
    {
      "commit": "64b56033c5c396937d52497b3f7e41b6f0f56afb",
      "tree": "89eef4f2f459fd4bc46f04c8ed34f52a55aa731f",
      "parents": [
        "f5a07ae078cb14bd58053a883633f235352275f3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 20 15:52:39 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 21 08:37:49 2019 +0000"
      },
      "message": "Abort transaction before finalizable allocation...\n\n... instead of aborting after the allocation.\n\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: 26687569\nChange-Id: I933b3b940bbd2125f4b5316db8dcf78cb5c8c8fc\n"
    },
    {
      "commit": "c56a23e12039d846a899d8b2ff535019480912e5",
      "tree": "3951a1164c0a523a570a1956fa6ec6e9930d3273",
      "parents": [
        "4444f1b38aa9269365c4a5d506b6d92a3222841a"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Jun 05 17:45:49 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Jun 14 08:51:05 2019 +0000"
      },
      "message": "Switch-interpreter: Make the instruction field constant.\n\nThe field is always set to the currently handled instruction.\n\nThe \u0027next\u0027 field stores the instruction to be executed next,\nwhich defaults to fallthrough unless overwritten by handler.\n\nTest: test.py -b -r --host --64 --interpreter\nTest: run-libjdwp-tests.sh --mode\u003dhost --variant\u003dX64 --debug --no-jit\nChange-Id: Iadae51ead3e2f657717f190d07b04f4c28890f43\n"
    },
    {
      "commit": "b7c640d364d32b79cb52d04750b063667a9a0c86",
      "tree": "9caafc96879f83f8e5dd3cd45b9005be6e2b7deb",
      "parents": [
        "3ffb5b1576f8af0c361284ebd8d2d54c70ede3ff"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Mar 20 15:52:13 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jun 10 18:33:25 2019 +0000"
      },
      "message": "JVMTI Force early return\n\nAdd support for can_force_early_return jvmti capability. This allows\none to force java frames to exit early. Exited frames have all of\ntheir normal locks released.\n\nWe implement this by modifying the existing method exit events to\nallow one to modify the exit value during the callback. This is used\nto implement ForceEarlyReturn by adding internal-only events that will\nchange the return value of methods once they return (using\nkForcePopFrame) avoiding the need to modify the actual interpreter\nvery deeply. This also makes it simple to continue to use the standard\ndeoptimization functions to force the actual return.\n\nIn order to simplify book-keeping the internal event is refcounted,\nnot associated with any specific jvmtiEnv, and only settable on\nspecific threads. The internal event is added by the ForceEarlyReturn\nfunction and then removed by the MethodExit event when we update the\nreturn value.\n\nBug: 130028055\nTest: ./test.py --host\nChange-Id: Ifa44605b4e8032605f503a654ddf4bd2fc6b60bf\n"
    },
    {
      "commit": "8867f3b017546ff187a99ac57bc91ac2bcf1f4f9",
      "tree": "29dbf68255584d48694bd8a50b23d8758987278c",
      "parents": [
        "d3b6664f454e7ea61597c0235b4a9df95056f4cd"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri May 31 20:01:46 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Jun 07 17:01:44 2019 +0000"
      },
      "message": "Switch-interpreter: Add new \u0027next\u0027 instruction field.\n\nThis field is set by handlers to the next instruction to execute.\nIt is initialized to fall-through and can be overwritten as needed.\n\nAs the first step, only DCHECK its value against the \u0027inst\u0027 field.\nThe next step will be to remove all the inst-\u003eNext_xxx() calls.\n\nTest: test.py -b -r --host --64 --interpreter\nTest: run-libjdwp-tests.sh --mode\u003dhost --variant\u003dX64 --debug --no-jit\nChange-Id: I92740d21871cf3a5b34d9d1615ad2a71ba021339\n"
    },
    {
      "commit": "1332c26c69a0910a7d32232261c30b197348e603",
      "tree": "63d8522259bea08bde662ed11d8e532790d6f42d",
      "parents": [
        "ee12e3abd382a742fbb7aac7a50deba7591e2c00"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Jun 04 13:13:37 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Jun 05 12:46:38 2019 +0000"
      },
      "message": "Switch-interpreter: Reduce copy-pasted code in array handling.\n\nTest: test.py -b -r --host --64 --interpreter\nTest: run-libjdwp-tests.sh --mode\u003dhost --variant\u003dX64 --debug --no-jit\nChange-Id: I343b3f3d29fa1d043965bb0dbdef00442854cb42\n"
    },
    {
      "commit": "ee12e3abd382a742fbb7aac7a50deba7591e2c00",
      "tree": "07fdbe2624723ff6292d05643657273633158882",
      "parents": [
        "05e4b0263ffc91fef9729527cf176cae0fd7f22b"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Jun 03 15:18:57 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Jun 05 12:46:38 2019 +0000"
      },
      "message": "Switch-interpreter: Reduce amount of copy-pasted code.\n\nTest: test.py -b --host --64 --interpreter\nTest: run-jdwp-tests.sh --mode\u003dhost --variant\u003dX64 --debug\nTest: run-libjdwp-tests.sh --mode\u003dhost --variant\u003dX64 --debug --no-jit\nChange-Id: I7b96a05bdaf13c16b900a0cf77ef911451cad61e\n"
    },
    {
      "commit": "bd613eced14bc56ece6beb276addab0f40337163",
      "tree": "2ed4633344615472d08f896e4f47fe840809fa78",
      "parents": [
        "6baf64482aa90b0af9cd6640247da64010910010"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu May 30 15:39:38 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Jun 04 12:40:04 2019 +0000"
      },
      "message": "Switch-interpreter: Add boolean return value to opcodes.\n\nCurrently unused - this is in preparation for future CLs.\n\nThe intention is that \"return false\" must always immediately\npropagate all the way to the main loop, which can then use\nit to handle abnormal cases in uniform and localized way.\n\nTest: ./art/test.py -b --host --64 --interpreter\nChange-Id: I21b0a26b08488add0af4825469f68c6cbf507106\n"
    },
    {
      "commit": "6baf64482aa90b0af9cd6640247da64010910010",
      "tree": "cb14f87eae03e8d7739d8d9abba0e99d58eb1923",
      "parents": [
        "1cfbd2946c58cf9211a80f81222f805f00daab00"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu May 30 14:57:43 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Jun 04 12:40:04 2019 +0000"
      },
      "message": "Switch-interpreter: Add GetVReg/SetVReg forwarding helpers.\n\nReduce the opcode verbosity and reformat the file.\n\nTest: diff libart.so disassembly\nChange-Id: I5bc109b083743e0746424f1d25405ccc65200897\n"
    },
    {
      "commit": "49af704f0f824202e73a0928d76fca27b71cc598",
      "tree": "737203c0a6cf93a4d073038d778947d41c09b4b5",
      "parents": [
        "bee28948fd9ca995568549e9cf95108e09fe2475"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed May 29 18:30:33 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 30 20:51:28 2019 +0000"
      },
      "message": "Ensure non-standard returns release monitors\n\nWe were incorrectly failing to unlock monitors that were acquired by a\nframe when the frame is popped off the stack in a non-standard manner.\nThis can lead to monitors having an incorrect count and being\nimpossible for any other thread to lock.\n\nTest: ./test.py --host\nBug: 133901254\nChange-Id: I2efbb8854dd5530c66d780f6853ec6e05a69c83b\n"
    },
    {
      "commit": "d6f579c1a9d3583f02081ca3724be75fec668b95",
      "tree": "4d99c630027a8d63d306ff7835924f21d9160842",
      "parents": [
        "27085041afdac79dcf643e80f80c0d9a57bd00b1"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed May 29 18:09:30 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu May 30 09:30:43 2019 +0000"
      },
      "message": "Switch-interpreter: Use more helpers for opcode arguments.\n\nSecond half of the rename. The old VReg methods returned a variety\nof integer type (sign/size) so this CL isn\u0027t necessarily trivial.\n\nTest: diff libart.so disassembly between PS1 and PS2\nChange-Id: Ic41492e4e86e950b8cc2fb9c0b5ef68b97763811\n"
    },
    {
      "commit": "436f6c1e53b735ace36fbfe48c337ece07d76e62",
      "tree": "77cadf8842b3d33f0491441c4c2e0d873a391f40",
      "parents": [
        "9a292a1d28c11eba629f6bd62d475af83b155f9e"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed May 22 13:28:42 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri May 24 17:55:27 2019 +0000"
      },
      "message": "Switch-interpreter: Add helpers to get opcode arguments.\n\nAdd trivial helpers to get opcodes arguments (A/B/C).\n\nEnsure the generic getters in Instruction can take\nadvantage of knowing the format at compile-time.\n\nAs the first step, I have simplified the code only where\nthe argument is used as index for SetVReg/GetVReg calls.\n\nTest: ART_USE_CXX_INTERPRETER\u003dtrue ./art/test.py -b --host\nTest: ART_USE_CXX_INTERPRETER\u003dtrue ./art/tools/run-jdwp-tests.sh \\\n      --mode\u003dhost --variant\u003dX32 --debug --no-jit\nChange-Id: I765c0eb16438806c3624fabe3aade040c7bb3387\n"
    },
    {
      "commit": "9b81ac36e161fd993eab17b43b93a96e8c63b5cc",
      "tree": "bac59dd8a62ae9f410c707a4086c330b8923a55b",
      "parents": [
        "92ed90ca3897ae7861b22aa12740065152839649"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 16 16:47:08 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 17 08:10:30 2019 +0000"
      },
      "message": "Add default argument kIsInstrumented\u003dtrue.\n\nkIsInstrumented\u003dfalse is reserved for use by specialized\nentrypoints which are used only when we can ensure that\nthe code is not instrumented. So add the default argument\nto simplify all other callers.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I3419795794fec9a1733ab3ad698b6415dbac679d\n"
    },
    {
      "commit": "19711d479cd4bc4c2d02edf37526cd4e2a6235f7",
      "tree": "53851b37097ffe2b11e42fd271eb27869956f2c0",
      "parents": [
        "8311489bcaa94a4527d8e010df6a78d457273b53"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Apr 12 14:05:34 2019 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed May 08 10:18:50 2019 +0000"
      },
      "message": "ObjPtr\u003c\u003e-ify instrumentation.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --interpreter\nBug: 31113334\nChange-Id: I95d9e1c9c9a0c9e460048c686c229618126b66d5\n"
    },
    {
      "commit": "e3fc2d1644fd788509b834b01b83a28595721c47",
      "tree": "ed18c7651b9968486ea91d7717f6e6bd1dbdb674",
      "parents": [
        "58431a7cf863b2eb7fe25eff6a28ec376f2f151d"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Nov 30 13:41:14 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Dec 14 16:32:47 2018 +0000"
      },
      "message": "Revert^2 \"Reduce the number of calls to Jit::AddSamples.\"\n\nThe method is called for every invoke which is expensive.\nAdd samples, but don\u0027t check the consequences every time.\n\nThis reduces its cost from 3.5% to 1% (maps on device).\n\nThis reverts commit 0402f4b019c1d6c567b1c56589f1ea9170ab5dcc\nand fixes 667-jit-jni-stub which relied on being able to set\nthe sample count to exactly one below the compilation threshold,\nand then expected the compilation to happen on the next sample.\n\nTest: ./art/test.py -b --host -r --ndebug\nTest: ./art/test.py -b -r -t 570\nChange-Id: I99c6d03f565f17fe6539ed89632d8f8bbda68107\n"
    },
    {
      "commit": "0402f4b019c1d6c567b1c56589f1ea9170ab5dcc",
      "tree": "fb0705380c3d1600a08c0e95ed581a967bdf0da0",
      "parents": [
        "db94f2be59e60bde11ac903c5bf30e63ead67992"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 29 19:18:46 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Nov 29 19:18:46 2018 +0000"
      },
      "message": "Revert \"Reduce the number of calls to Jit::AddSamples.\"\n\nThis reverts commit db94f2be59e60bde11ac903c5bf30e63ead67992.\n\nReason for revert: Break 667-jit-jni-stub\n\nChange-Id: Ia84a78be8acb62e87f7cd93e43c2967efac8caab\n"
    },
    {
      "commit": "db94f2be59e60bde11ac903c5bf30e63ead67992",
      "tree": "95d66a33cefefac89f84534ac4f023e76ff096d9",
      "parents": [
        "076c9da66b606057109e5fb2902d28129d120b96"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Nov 09 12:58:28 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Nov 29 11:41:07 2018 +0000"
      },
      "message": "Reduce the number of calls to Jit::AddSamples.\n\nThe method is called for every invoke which is expensive.\nAdd samples, but don\u0027t check the consequences every time.\n\nThis reduces its cost from 3.5% to 1% (maps on device).\n\nTest: ./art/test.py -b -r --host --64\nChange-Id: Ie90da905d067b5d85a3c494c7c9af81b24dc8135\n"
    },
    {
      "commit": "5f250014f4cc348a573798c4daa191ea1381078d",
      "tree": "ea7937619632fa1fa341563a5b8c443bcf77fd2f",
      "parents": [
        "fdf6401e1594e71a1e86d455d55333b939160bd9"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Nov 08 14:16:38 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Nov 09 11:42:17 2018 +0000"
      },
      "message": "Make exception handling code in switch interpreter NO_INLINE.\n\nExceptions should be rare so the code can be shared.\nThe compiler needs a bit of help with optimization.\n\nIt saves 81k(arm32) and 150k(arm64) from libart.so.\n\nPerformance difference is within noise (golem using the switch).\n\nTest: \"./art/test.py -b -r --interpreter --host\" with switch interpreter.\nChange-Id: I08a5690ceaf6b3cae8c2a486ab809e5604b88e0a\n"
    },
    {
      "commit": "a4a96afd95e0819f4f35ece733e9a0731355d0d2",
      "tree": "60abbacda9fcbbdb56392e540aa5c683000812ff",
      "parents": [
        "d4c1c08773414451dda32a4228253c0f443313a2"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Oct 31 16:34:58 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Nov 08 12:25:15 2018 +0000"
      },
      "message": "Share the preamble in switch interpreter.\n\nMove the preamble code to the main loop to avoid replicating it.\n\nThis halves per-file compile time to 0.5 min.\n\nIt saves 225k(arm32) and 348k(arm64) from libart.so.\n\nPerformance difference is within noise (golem using the switch).\n\nTest: \"test.py -b -r --interpreter --host\" with switch interpreter.\nChange-Id: I2615b3568eb79560d2d342ac3dd28f6269ee5e74\n"
    },
    {
      "commit": "47ad3763e0f0e74c6469e899af883a6c4d09d7bf",
      "tree": "d6e67f431a21ee8fbdfe6d2283e1e04587a8aeca",
      "parents": [
        "fe59955fc41e277bf1c60378202ba785abb1e4a8"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Oct 31 12:43:40 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Nov 08 10:30:21 2018 +0000"
      },
      "message": "Replace switch interpreter macros with C++ functions.\n\nC++ code is more maintainable than huge macros.\n\nThe \"return\" statement was used within the macros to skip the rest\nof the interpreted opcode.  This is slightly more tricky in functions.\nAll such use cases have been replaced with \"return false\", and the\ncalling functions always check the return value and propagate it up.\n\nPerformance difference is within noise (golem using the switch).\n\nThis halves per-file compile time to 1min.\n\nTest: \"test.py -b -r --interpreter --host\" with switch interpreter.\nChange-Id: I01d861dec1c4a7e95e412fd4b662e5a4d7bd55a8\n"
    },
    {
      "commit": "6da8247ebe2e063cc14a5e943fa8b3416edf936a",
      "tree": "2765ad9af2e9aa4132ca66218ee927b35943ec95",
      "parents": [
        "4fc843c4fc9f33c4ba49c1303d526d0e0e6a3788"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Oct 23 14:03:08 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Nov 06 16:22:06 2018 +0000"
      },
      "message": "Split interpreter_switch_impl into smaller functions.\n\nSplit the uber switch statement into smaller functions.\nThose functions are still always inlined in the switch,\nso it makes little difference for the time being.\n\nHowever the separation should allow us to:\n - Remove the excessive use of macros in the interpreter.\n - Add helpers to handle similar opcodes.\n - Simplify the individual opcode handlers.\n - Simplify interactions with mterp.\n - Easily experiment (e.g. switch vs goto dispatch).\n\nPerformance difference is within noise (golem using the switch).\n\nTest: \"test.py -r --interpreter --host\" with switch interpreter.\nChange-Id: I6075b354e0439bf89061f492dd9b9cbe743145cb\n"
    },
    {
      "commit": "30890f6af9bae6ece7267c72e3c82e3c61da4d9e",
      "tree": "88473f05ace3839eb8b0ea51b9d76d80d17e1c96",
      "parents": [
        "6b72b77e0823849fb75201461af80e69e1b4d803",
        "08cb7382573f122c70b84656370dfa9a18d833b1"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Oct 30 22:42:05 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 30 22:42:05 2018 +0000"
      },
      "message": "Merge \"Add invoke fast-path support for quickened invokes.\""
    },
    {
      "commit": "08cb7382573f122c70b84656370dfa9a18d833b1",
      "tree": "e583bbe955094ca081a0112549b46fd3708c4214",
      "parents": [
        "dc0156dd2e76d518bf1432ae95785ddff9144b78"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Oct 30 09:27:59 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Oct 30 22:40:56 2018 +0000"
      },
      "message": "Add invoke fast-path support for quickened invokes.\n\nQuickened invokes had their own handler implementation.\nMerge it into the generic DoInvoke which has the fast-path.\n\nThis speeds up arm64 golem interpreter benchmarks by 6%.\n\nTest: test.py -b -r --interpreter --host --64\nChange-Id: Icac9e073f61df67780242877179111ed7bee7154\n"
    },
    {
      "commit": "fd63bbf88147e19c32c21678b90d8cc450496fc3",
      "tree": "d78f12fbfd72bf29b16e13a7f3fabfca5f1d3f88",
      "parents": [
        "0ee508253edcdee41a80fcbf1511234ca176233d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Oct 29 12:55:35 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Oct 30 10:57:42 2018 -0700"
      },
      "message": "ART: Add string-alloc-inl.h\n\nIn an effort to reduce the (transitive) proliferation of heap-inl\nadd a specific inline header for string allocation.\n\nBug: 118385392\nTest: mmma art\nTest: m test-art-host\nChange-Id: I68d3bcf2b3615d12231010940d0a24a1dbc03826\n"
    },
    {
      "commit": "30232c452f2397f9cff4a3a52c5a81770f06548b",
      "tree": "29c9a90e282f8fe384e329d6cffb5dc1d70a3b58",
      "parents": [
        "3070e9c98573f94f1ccc5997985a630ab5fbf21b"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Oct 26 18:56:01 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Oct 26 19:11:59 2018 +0100"
      },
      "message": "Fix HANDLE_PENDING_EXCEPTION in switch interpreter.\n\nEnsure that we immediately return to caller or jump to the handler.\n\nThere were cases where we executed the rest of the current opcode.\n\nTest: ./art/test.py -b -r --interpreter --host --64\nChange-Id: I3c82669fde2c77b8565d012286fd4bc609e15896\n"
    },
    {
      "commit": "2ee09ffc7a6aca354a958357801711688a7a4154",
      "tree": "dbd56e49b025d2a0695610cbfddb7b5bc6432c30",
      "parents": [
        "fd2aa2bf72563870c9261f248f992a20ac4837a8"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Oct 24 13:24:22 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Oct 24 17:11:57 2018 +0100"
      },
      "message": "Split interpreter_switch_impl.cc\n\nDue to regression in clang this file takes long to compile (\u003e10min).\nAs a quick fix, split the file - one per explicit instantiation.\n\nTest: Measure incremental build time - it halves the build time.\nChange-Id: I9d35d43c185deb19ef9cf32ed35328c433a837f2\n"
    },
    {
      "commit": "98ea9d9d82ab078ca10fa7f8e02eddda94cf1d98",
      "tree": "a848b7e41ff227a2d3d4d6795ec11089f39cb6ca",
      "parents": [
        "02338775e33b553be51d44ff60bb1ef8e527bd94"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Oct 19 14:06:15 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Oct 23 15:19:55 2018 -0700"
      },
      "message": "ART: Refactor for bugprone-argument-comment\n\nHandles runtime.\n\nBug: 116054210\nTest: WITH_TIDY\u003d1 mmma art\nChange-Id: Ibc0d5086809d647f0ce4df5452eb84442d27ecf0\n"
    },
    {
      "commit": "1f5ab4ecc6589a8d5a671ef56e6efcc3e40d7c5b",
      "tree": "a0912961631749e7bca17a527b1e106a10554185",
      "parents": [
        "21ff4ad92e8d74cfe8d95ec64b177d47084ec374"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Oct 15 11:46:46 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Oct 17 18:37:32 2018 +0000"
      },
      "message": "Rename fast_invoke template argument of DoInvoke to is_mterp.\n\nThis is more descriptive than \"fast\".\n\nTest: test.py -b --interpreter --host\nChange-Id: I107c59db2aa00dd6fd727fe08c739c940dd7899c\n"
    },
    {
      "commit": "0aa7a5a6a7bc350b79351f52e26c97747e927acf",
      "tree": "a583889668d9703d16d37586d56421bd27c62661",
      "parents": [
        "e12575640dca5118bf96245f373acda276c22178"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Oct 10 15:58:14 2018 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Oct 11 16:41:54 2018 -0700"
      },
      "message": "Revert^4 \"JVMTI PopFrame support\"\n\nThis reverts commit 202b617acf477e8e8e11915f467120a0bd518e74.\nThis unreverts commit 202b617acf.\nThis unreverts commit 88a2a9d7a1.\n\nThere were several bugs with the implementation of pop-frame related\nto interactions between the jit, exception handling, class-loading,\nand deoptimization.\n\n- We were instrumenting the target thread stack in cases where it was\n  unnecessary which caused the exception handler to incorrectly\n  determine that a method was not deoptimizable. This caused the\n  pop-frame to be ignored.\n\n- We were incorrectly sending ExceptionCatch events if an exception\n  suppressed by pop-frame would have been caught in the current frame.\n\n- We were allowing pop-frame to be used on threads suspended in the\n  ClassLoad or ClassPrepare events despite having surprising semantics\n  in that situation (see b/117615146).\n\nNeeded to modify test 1953 slightly for inclusion in CTS. I needed to\nmake the CTS entrypoint not run the class-load tests (since the cts\nconfiguration means the classes are loaded by the verifier and not the\ninterpreter). I updated the expected.txt and check script to reflect\nthis.\n\nReason for revert: Fixed issue causing Exception events to sometimes\n                   eat PopFrame and other issues.\n\nTest: ./test.py --host\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\n\nBug: 73255278\nBug: 111357976\nBug: 117533193\nBug: 117615146\n\nChange-Id: I655c4fe769938cf41d7589f931d6710cf2001506\n"
    },
    {
      "commit": "202b617acf477e8e8e11915f467120a0bd518e74",
      "tree": "4d1124b540984f970acaf494f4fd85cc347fbd57",
      "parents": [
        "1c7b1fcf0ff29d83d13d38d0451a54474ccf5964"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 10 07:47:58 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 10 07:47:58 2018 +0000"
      },
      "message": "Revert \"Revert^2 \"JVMTI PopFrame support\"\"\n\nThis reverts commit 1c7b1fcf0ff29d83d13d38d0451a54474ccf5964.\n\nBug: 73255278\nBug: 111357976\nbug: 117533193\n\nReason for revert: Test failures\n\nChange-Id: I9da863fd95264007c4efeb85539e704e83499dcf\n"
    },
    {
      "commit": "1c7b1fcf0ff29d83d13d38d0451a54474ccf5964",
      "tree": "b978817acd252f10bd4648d3582ac9459fc9a0f4",
      "parents": [
        "59b950f53152c169464ba8c63d44102eeba1e594"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Oct 05 23:42:12 2018 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Oct 08 13:18:35 2018 -0700"
      },
      "message": "Revert^2 \"JVMTI PopFrame support\"\n\nThis reverts commit f67d0cbf2743b29aa6e1be7ae2f71762b8762785.\n\nRedefine-stress causes classes to be loaded at slightly different\nplaces due to the deep verification needed to redefine a class. This\nwould cause the parts of tests 1953 and 1954 to fail due to classes\nloading at unexpected times. We changed the test to skip these\ntest-cases when they cannot be correctly executed.\n\nReason for revert: Fixed issue causing tests to fail under\n                   redefine-stress\nTest: ./test.py --host\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\nTest: ./test/testrunner/testrunner.py --host --redefine-stress\nBug: 73255278\nBug: 111357976\nChange-Id: I46fb4aed878bcc9398f2b73ad5040d7c97aec3ef\n"
    },
    {
      "commit": "068a9bec8d637ce907f6c2829b772a99cae60611",
      "tree": "f099925c0269895935c9eea9a0caca8e8f801dce",
      "parents": [
        "bc550bbbf2fcd82b5b888683a4e3708a26d0efe6",
        "f67d0cbf2743b29aa6e1be7ae2f71762b8762785"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Oct 05 23:41:16 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 05 23:41:16 2018 +0000"
      },
      "message": "Merge \"Revert \"JVMTI PopFrame support\"\""
    },
    {
      "commit": "f67d0cbf2743b29aa6e1be7ae2f71762b8762785",
      "tree": "b0b1b8a1908541791bfeb18c1117482d559ded38",
      "parents": [
        "88a2a9d7a14b67e10525d93b0ee57d9dd6bc345a"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Oct 05 23:39:54 2018 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Oct 05 23:40:30 2018 +0000"
      },
      "message": "Revert \"JVMTI PopFrame support\"\n\nThis reverts commit 88a2a9d7a14b67e10525d93b0ee57d9dd6bc345a.\n\nReason for revert: Fails class-load/prepare tests with jit-at-first-use.\nBug: 73255278\nBug: 111357976\nTest: None\nChange-Id: Id8dea6dcf124d56e3a8dfa19e6ed39cc70370c34\n"
    },
    {
      "commit": "6f22e06c0a4ca9bdcd1bb2df7352e3cca791a803",
      "tree": "6b8dbe56697244f3ab18acbc9b9ce301d149c244",
      "parents": [
        "88a2a9d7a14b67e10525d93b0ee57d9dd6bc345a"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Oct 05 15:05:12 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Oct 05 15:46:24 2018 -0700"
      },
      "message": "Disable ASAN for ExecuteSwitchImplCpp\n\nASAN bloats this function enormously and causes it to overflow the\nWframe-larger-than size. This disables the ASAN checks in this\nfunction until we find a better way to fix this.\n\nTest: SANITIZE_HOST\u003daddress ASAN_OPTIONS\u003ddetect_leaks\u003d0 ./test.py --host\nBug: 73255278\nBug: 111357976\nBug: 117341496\nChange-Id: I724b805727514a512cf658759d4e90610f39cbfa\n"
    },
    {
      "commit": "88a2a9d7a14b67e10525d93b0ee57d9dd6bc345a",
      "tree": "a19af813a97be817a76072534139a77b16f3ad87",
      "parents": [
        "fc7d33fc052d993eaa205337e6a805022d2cd822"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Mar 14 14:44:29 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Oct 04 11:04:49 2018 -0700"
      },
      "message": "JVMTI PopFrame support\n\nImplement support for the JVMTI can_pop_frames capability. This works\nby marking shadow-frames with a bit that forces it to be popped or an\ninstruction to be retried. When a PopFrame is requested the plugin\nwill deoptimize the targeted thread and force the interpreter to deal\nwith the frame pop. If the can_pop_frames capability is enabled the\nruntime will be forced to handle all exceptions through the\ninterpreter. This is required to support PopFrame during some\nexception events.\n\nTest: ./test.py --host\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\nBug: 73255278\nBug: 111357976\nChange-Id: I62d6b1f4ff387c794ba45093c3d6773aaf642067\n"
    },
    {
      "commit": "6ec2a1bf1cbecf17546df780dd0ad769042e1874",
      "tree": "09f7430f020e04dc892ff2c2152bb773cd45c0dd",
      "parents": [
        "2d3065e6ca0bd707bc998b7d260bb8e8ec07cf87"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 22 15:33:48 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 23 13:48:31 2018 +0100"
      },
      "message": "ObjPtr\u003c\u003e-ify UnstartedRuntime, fix 2 stale reference uses.\n\nTest: Rely on TreeHugger.\nBug: 31113334\nChange-Id: I35f76c3e3b94dfca18dbe67aba065a1270f4e5ee\n"
    },
    {
      "commit": "06d10a78506fae7e033795cda7b1d9d0e1f1fff5",
      "tree": "91f94a605395776710f3d14298613a803158f3aa",
      "parents": [
        "93d301397c83b08f6fc165847a3d518e1031f392"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon May 14 08:53:38 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon May 14 16:49:55 2018 +0100"
      },
      "message": "ART: Add dex::ProtoIndex\n\nTest: m -j32 test-art-host\nChange-Id: Ic2d2a7a43be1b8590b97cdf3729200b043ffc6a3\n"
    },
    {
      "commit": "946bb09a5adc7d591498b4504aa5d9354457953e",
      "tree": "3f1931a9117856c806b8371987700b5646a7d195",
      "parents": [
        "68f0680e83179cfe0127fda54a8e02a8552bf619"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Mar 09 17:23:01 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Mar 15 14:59:21 2018 +0000"
      },
      "message": "Support unwinding though the switch interpreter.\n\nWrap the switch interpreter in small assembly method which defines\nDEX PC in CFI and thus it allows libunwind to backtrace through it.\n\nBug: 22414682\nTest: testrunner.py --host -t 137\nTest: testrunner.py --target -t 137\nChange-Id: I31dad9f0fb446151baaa99234b64f25c8ca2fa87\n"
    },
    {
      "commit": "c431b9dc4b23cc950eb313695258df5d89f53b22",
      "tree": "422273559c3ae52caff0c6b1cf1a62a8312f0e26",
      "parents": [
        "f46f46cf5bd32788d5252b7107628a66594a5e98"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Mar 02 12:01:51 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Mar 05 13:58:20 2018 -0800"
      },
      "message": "Move most of runtime/base to libartbase/base\n\nEnforce the layering that code in runtime/base should not depend on\nruntime by separating it into libartbase.  Some of the code in\nruntime/base depends on the Runtime class, so it cannot be moved yet.\nAlso, some of the tests depend on CommonRuntimeTest, which itself needs\nto be factored (in a subsequent CL).\n\nBug: 22322814\nTest: make -j 50 checkbuild\n      make -j 50 test-art-host\n\nChange-Id: I8b096c1e2542f829eb456b4b057c71421b77d7e2\n"
    },
    {
      "commit": "cc917d9f0495402f5301aa9df0071ad38ab78142",
      "tree": "98eec3063dcc7f2e279a3173c8b88d3ef749ed92",
      "parents": [
        "54d2c7e503550e602e6cbe4326455d7b44dc3d49"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Feb 22 13:28:28 2018 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Feb 23 09:04:00 2018 -0800"
      },
      "message": "Fix issue with obsolete methods and const-method-handle\n\nWe were incorrectly using the non-obsolete version of the method to\nsearch for the target of const-method-handle instructions. This meant\nthat obsolete methods would see the wrong method-handle or crash.\n\nSince no java code (currently) compiles to dex code using\n\u0027const-method-handle\u0027 we needed to use ASM to construct the test\nclass.\n\nBug: 73744024\nTest: ./test.py --host -j50\n\nChange-Id: I14480170e12eee7f2df5ac084254039a040848c3\n"
    },
    {
      "commit": "9e734c7ab4599d7747a05db0dc73c7b668cb6683",
      "tree": "dce1d1993734a947fb2e6f626eb1b425cb72143b",
      "parents": [
        "b496af808eaf3af5ebac50aef4fbec33323b5016"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Jan 04 17:56:19 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Jan 05 11:07:19 2018 -0800"
      },
      "message": "Create dex subdirectory\n\nMove all the DexFile related source to a common subdirectory dex/ of\nruntime.\n\nBug: 71361973\nTest: make -j 50 test-art-host\nChange-Id: I59e984ed660b93e0776556308be3d653722f5223\n"
    },
    {
      "commit": "808c7a57bb913b13c22884f57cdacd59bf1fdb3f",
      "tree": "d7f0d7cabaac5a7646c25bae584a82a9aa279cc0",
      "parents": [
        "64bae9fb677aa0e2406d13ea9f8ebaa92e16f978"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Dec 15 11:19:33 2017 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Dec 22 09:41:17 2017 -0800"
      },
      "message": "Make CodeItem fields private\n\nMake code item fields private and use accessors. Added a hand full of\nfriend classes to reduce the size of the change.\n\nChanged default to be nullable and removed CreateNullable.\nCreateNullable was a bad API since it defaulted to the unsafe, may\nadd a CreateNonNullable if it\u0027s important for performance.\n\nMotivation:\nHave a different layout for code items in cdex.\n\nBug: 63756964\nTest: test-art-host-gtest\nTest: test/testrunner/testrunner.py --host\nTest: art/tools/run-jdwp-tests.sh \u0027--mode\u003dhost\u0027 \u0027--variant\u003dX32\u0027 --debug\n\nChange-Id: I42bc7435e20358682075cb6de52713b595f95bf9\n"
    },
    {
      "commit": "e7732be2390f00b1f98b8c0066a37892ee1126f6",
      "tree": "a2f1b1b46f1eb6e3623ec37f077b57e0f1b01013",
      "parents": [
        "44f520b12bab27ef4c0719f9dd296d76c79b23cb"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Oct 11 14:35:20 2017 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Oct 16 21:20:36 2017 +0100"
      },
      "message": "ART: Implement missing mterp handlers\n\nAdds mterp handlers for const-method-{handle,type}, invoke-custom, and\ninvoke-polymorphic.\n\nMinor refactoring starting from interpreter_common.{h,cc} for consistency.\n\nTest: m test-art-host\nBug: 65872996\nChange-Id: I95cda758d1ce2fb52e3b1c6211e5d1763cee7bd6\n"
    },
    {
      "commit": "f1671357148b0ed205c93d051efd03f49e774885",
      "tree": "3a54ee282a807d5f2ee6a878945aa9e896131288",
      "parents": [
        "844a4edc7f72e33a3b328c3d53ef710909d2273d",
        "54d39dc42630cd83f2d1bec5704805febb894819"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Oct 03 18:29:28 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 03 18:29:28 2017 +0000"
      },
      "message": "Merge changes from topic \"thread-stop\"\n\n* changes:\n  Implement JVMTI can_signal_thread capability.\n  Implement asynchronous exception support\n"
    },
    {
      "commit": "2e59994c3c586d8b753e4b14a94c81bce3dba1a9",
      "tree": "ab749ce709732821c7c00c81eb76afef032fd888",
      "parents": [
        "865a0503515f78611dce103bd04b7c66c051d304"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Sep 22 16:17:41 2017 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Oct 02 16:08:18 2017 +0100"
      },
      "message": "ART: support for const-method-{handle,type}\n\nAdds support for const-method-handle and const-method-type bytecodes.\n\nBug: 66562269\nTest: art/test/run-test --host 979\nTest: art/test/dexdump/run-all-tests\nChange-Id: I812eaf0f2439d6126b4287483fe2348366cacf90\n"
    },
    {
      "commit": "848574ca50bb7e2d109608359d1086b3ca6bb4b3",
      "tree": "6a3d55ae8b66279c1e417c7c5116394613037ae8",
      "parents": [
        "9c0a6ce0a41eaf78f3fc3224fc34195601b6e0b3"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Sep 25 16:59:39 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Sep 28 12:56:13 2017 -0700"
      },
      "message": "Implement asynchronous exception support\n\nThis CL implements async exception support in the switch interpreter.\nIt also adds support for the MTerp to detect and switch back to the\nswitch interpreter in cases where an async exception is detected.\n\nTests follow in next CL.\n\nTest: ./test.py --host -j50\n\nBug: 62821960\nBug: 34415266\n\nChange-Id: Idb53711a40c20f962de8aa6b74662676b8bd25c6\n"
    },
    {
      "commit": "e2abbc604ce003c776c00ecf1293796bb4c4ac5a",
      "tree": "f7d124d1861cad2162c30dfe932bb4e1beaf41ef",
      "parents": [
        "7090dfe84f78b1928fcbdfd664d0dd9ea52633ff"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Sep 15 11:59:26 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 18 11:36:24 2017 -0700"
      },
      "message": "ART: Move kDexNoIndex to dex_file_types.h\n\nDefine the constant with the types to allow lowering the dependency\non DexFile.\n\nTest: m\nChange-Id: I3c61421db45be96d2057e01b1a7825883d8bd178\n"
    },
    {
      "commit": "9fb1ab1f6bb58bdaccef78bc81b3202d0121e2ed",
      "tree": "f4ec9bb10a2191f4aa80b1ee40332071bed38bab",
      "parents": [
        "c101222c854a0c476f5b6ae64e20adbd38126a3c"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Sep 05 09:32:49 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Sep 05 10:54:05 2017 -0700"
      },
      "message": "Revert \"Revert \"JVMTI Exception and ExceptionCatch events\"\"\n\nFixed error where we were incorrectly not updating a ShadowFrame\ndex_pc causing deoptimization errors.\n\nBug: 62821960\nBug: 65049545\n\nTest: ./test.py --host -j50\nTest: ./art/tools/run-libcore-tests.sh \\\n            --mode\u003dhost --variant-X32 --debug\n\nThis reverts commit 959742483885779f106e000df6dd422fc8657931.\n\nChange-Id: I91ab2bc3e645ddf0359c189b19a59a3ecf0d8921\n"
    },
    {
      "commit": "959742483885779f106e000df6dd422fc8657931",
      "tree": "413cbb42607eb92012cfc20f7e0d32d0da3e9875",
      "parents": [
        "798eab03120f6189e8f6aa804d67af1b1d9f00b0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 04 08:45:51 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 04 08:45:51 2017 +0000"
      },
      "message": "Revert \"JVMTI Exception and ExceptionCatch events\"\n\nBreaks tests.\n\nBug: 62821960\nBug: 65049545\n\nThis reverts commit 798eab03120f6189e8f6aa804d67af1b1d9f00b0.\n\nChange-Id: Ie96903df06bbbe41f288f5b75a5114b142998fac\n"
    },
    {
      "commit": "798eab03120f6189e8f6aa804d67af1b1d9f00b0",
      "tree": "828a9a896619a8575bcf20a078f193df54354899",
      "parents": [
        "9c4feaa082d8e8c00611a0657c3f80b1c1179a6f"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Aug 23 12:54:53 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Sep 01 10:10:14 2017 -0700"
      },
      "message": "JVMTI Exception and ExceptionCatch events\n\nAdd support for the JVMTI can_generate_exception_events capability.\nThis includes the Exception and ExceptionCatch events and all their\nassociated behaviors.\n\nTest: ./test.py --host -j50\nBug: 62821960\nBug: 65049545\n\nChange-Id: I21cc8522c01033cdeb47bf34fa433bf04bf7ca5c\n"
    },
    {
      "commit": "e814f9d09c0fb1b678e610780d11ce3577db3599",
      "tree": "fd0aeecb079c0e2383d73907410c831f3e172779",
      "parents": [
        "02cb397857c979dffae95e2db2678a72ec407cf0"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Jul 31 16:14:39 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Aug 29 14:52:11 2017 -0700"
      },
      "message": "JVMTI NotifyFramePop support\n\nAdds support for the JVMTI can_generate_frame_pop_events capability.\nThis includes the NotifyFramePop function and the FramePop event.\n\nWe mark the interpreter shadowframes directly to get the events. This\nrelies on the fact that we never replace extant shadow-frames on the\ninterpreter stack to ensure that we can distinguish which jvmti-envs\nrequested the frame pops.\n\nTest: ./test.py --host -j50\nBug: 34414072\nBug: 62821960\nBug: 65129403\n\nChange-Id: I6e79e39f62fdf79268540c5c1be6311df704cff7\n"
    },
    {
      "commit": "bd208d8e73084b691d9cfbe870120fe53863ce07",
      "tree": "9b2b20a1aeae2cba97a394f7b106ba31dbaf565a",
      "parents": [
        "83ee165fd4fde2d7939449881159e2e4b5d3b79d"
      ],
      "author": {
        "name": "Chang Xing",
        "email": "chxing@google.com",
        "time": "Wed Jul 12 14:53:17 2017 -0700"
      },
      "committer": {
        "name": "Chang Xing",
        "email": "chxing@google.com",
        "time": "Sat Jul 29 17:15:24 2017 -0700"
      },
      "message": "Read and write constraints for clinit\n\nFor clinits executed during pre-compile within a transaction, they are\nconstrained to only be able to access their own static fields because\nthe results of iniitialization relying on static fields, either read or\nwrite, of other classes are runtiime determined.\n\nFurther discussion can be found at b/62887449.\n\nWhen SGET and SPUT series instructions are executed, interpreter will\ncheck whether fields are static and does the target match with the\ntransaction owner, if not, abort transaction and throw an exception.\n\nTest: make test-art-host -j64\nBug: 62887449\nChange-Id: I3e655269c8af5f0b3f2c1841fdd2602c827c2757\n"
    },
    {
      "commit": "b45528c1f1b83ca8c970f439b54fbfcfda6908ea",
      "tree": "e8f493a7b21064d353d112ea1378d7819db385aa",
      "parents": [
        "2c2e13ec24bff70db6e49270b9d4d787add9925e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 27 14:14:28 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 27 15:30:47 2017 +0100"
      },
      "message": "ART: Refactor retrieval of types through ArtMethod.\n\nSplit Get*() functions that take a \"bool resolve\"\nargument into Lookup*() and Resolve*() functions.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nChange-Id: I0b7eaa1fadc2ffa8c0168203790467f91a126963\n"
    },
    {
      "commit": "2989a4a7f663d917c466cf8182356eca67bb8ae7",
      "tree": "dcbca95af80342208c5748585f486a1a33c3ea2c",
      "parents": [
        "fe9a4f061841a3c597aac6817a47c799c54fcad7"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jun 29 09:44:57 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jun 29 09:44:57 2017 -0700"
      },
      "message": "Make DoDexPcMoveEvent always be NO_INLINE\n\nThis function can cause the stack frame of ExecuteSwitchImpl to grow\npast the stack-frame limit if it is inlined.\n\nFollow up to: I70f76ba7a876bc57204d379295a6d75e5bcefb45\nFollow up to: I25c143715386bee74e99358062eeb2404e029e32\n\nTest: mma -j40 build-art\nBug: 63118894\nChange-Id: Id63f80c35a7d45637c658c3ba186eb8d908d80b0\n"
    },
    {
      "commit": "d3401278c919a32168d6b8dc553f46370aa23cab",
      "tree": "e6a5d77be9a32107bf2158d8fcb04c3f9f3cb5e1",
      "parents": [
        "9a70a63127c41f061fab48ffdf72b435171b40e2"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jun 28 20:07:31 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jun 29 03:34:06 2017 +0000"
      },
      "message": "Force DoDexPcMoveEvent to be NO_INLINE with ASAN\n\nThe function ExecuteSwitchImpl is made far larger then the limit when\nwe build with asan because of inlining this function.\n\nBug: 63118894\nTest: make -j49 droid ASAN_OPTIONS\u003ddetect_leaks\u003d0 SANITIZE_HOST\u003daddress\n\nFollow up to: I70f76ba7a876bc57204d379295a6d75e5bcefb45\n\nChange-Id: I25c143715386bee74e99358062eeb2404e029e32\n"
    },
    {
      "commit": "fc90567ec0bcd14f6096ab05bb2b9b6028fa796d",
      "tree": "87c3c2c229ebbeb2e6d57fa1c1b56b039c07dd7c",
      "parents": [
        "97e78033e6cf81d72c9d4d016e349282b911303c"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jun 27 17:53:15 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jun 28 13:44:41 2017 -0700"
      },
      "message": "Interpreter needs to handle DexPcMovedEvent throwing.\n\nDexPcMovedEvent can throw and the interpreter needs to handle this\nsituation.\n\nTests follow in later CL.\n\nTest: ./test.py --host -j40\nChange-Id: I70f76ba7a876bc57204d379295a6d75e5bcefb45\n"
    },
    {
      "commit": "ef43805b0e80015645a5fc52e53b93ad178f60e3",
      "tree": "8b991e4d46c60ee0a118a95e079a7178a0663959",
      "parents": [
        "bc81c32d7c6b7862816a23c9e8b594840d78e900"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 28 14:41:07 2017 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 28 14:47:09 2017 +0100"
      },
      "message": "Interpreter: Save and restore object result register.\n\nSave and restore object result register when there is a PC listener,\nto avoid moving GC issues.\n\nbug: 63088506\nbug: 15126502\n\nTest: TBD\nChange-Id: I231178e71469ccd167525d78bfc23f4fe32e23dd\n"
    },
    {
      "commit": "b7edcda968bb0cbaa69a3ad387fcd3194f5612be",
      "tree": "50748aac195d20a7e8f6d59a6e499f3fe69418de",
      "parents": [
        "049f2a58ea9276dfd162760271ad443570f2e660"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Apr 27 13:20:31 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jun 09 10:54:02 2017 -0700"
      },
      "message": "Add method tracing JVMTI callbacks\n\nAdd MethodEntryHook and MethodExitHook callbacks and associated\ncapabilities.\n\nSplit --jvmti-stress option in run-test into --jvmti-trace-stress and\n--jvmti-redefine-stress to test each different component.\n\nNB 3 differences from RI found:\n  1) RI will call methodExitHook again if the method exit hook throws\n     an exception. This can easily cause an infinite loop and the test\n     is specifically tweaked to prevent this from happening on the RI.\n  2) RI always includes the method being exited in the stack trace of\n     errors thrown in the hooks. In ART we will not include the method\n     if it is native. This is due to the way we call native methods\n     and would be extremely difficult to change.\n  3) The RI will allow exceptions thrown in the MethodEnterHook to be\n     caught by the entered method in some situations. This occurs with\n     the tryCatchExit test in 989. In ART this does not happen.\n\nBug: 34414073\nTest: ./test.py --host -j40\nTest: ART_TEST_FULL\u003dtrue DEXTER_BINARY\u003d\"/path/to/dexter\" \\\n      ./test/testrunner/testrunner.py --host -j40 -t 988\nTest: ART_TEST_FULL\u003dtrue DEXTER_BINARY\u003d\"/path/to/dexter\" \\\n      ./test/testrunner/testrunner.py --host -j40 -t 989\nTest: lunch aosp_angler-userdebug; \\\n      m -j40 droid build-art \u0026\u0026 \\\n      fastboot -w flashall \u0026\u0026 \\\n      ./test.py --target -j4\n\nChange-Id: Iab229353fae23c2ea27c2b698c831627a9f861b1\n"
    },
    {
      "commit": "d76615851af31791c7b1549e8c4609152237b9ce",
      "tree": "e438a8cb0892e02768c55c2bc99f8be1d00abacb",
      "parents": [
        "6ecff4d2127e70738aa2493d6deceb946c204eff"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon May 01 13:48:16 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jun 07 11:10:50 2017 -0700"
      },
      "message": "Handler-ize InstrumentationListener and related code\n\nWe are going to be making instrumentation listeners that can cause\nsuspensions during their running. We explicitly handler-ize all the\ninstrumentation listener functions in order to ensure this is safe.\n\nBug: 34414073\nTest: ./test.py --host --ntrace --trace -j40\nChange-Id: Ic719080d0991b104d41b7757df8d1f332c72cd04\n"
    },
    {
      "commit": "c069a30d42aefd902c20e8bc09dfad1683f07ded",
      "tree": "8bbf72bea7ea5d243b57f8e0ab64b687a9f60e4b",
      "parents": [
        "3f38398380b80d1ded078ebed1211b7e4f51460f"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 18 09:23:12 2017 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Feb 14 14:04:33 2017 +0000"
      },
      "message": "ART: invoke-custom support\n\nAdds invoke-custom instruction to the interpreter.\n\nBug: 33191717,30550796\nTest: art/test/run-test --host 952\nChange-Id: I3b754128649a8b3a00ade79ba2518d0e377f3a1e\n"
    },
    {
      "commit": "942fd3130254d8276cbfe8e6201825e9c49e9b2c",
      "tree": "62dbcd85ab150604e2d72a3c2d0c3639a28c9b7a",
      "parents": [
        "8bd59a0fd46db83616785168231e09fb95ed2ead"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jan 16 20:52:19 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jan 17 16:12:15 2017 +0000"
      },
      "message": "Reduce using ArtMethod\u0027s dex_cache_resolved_types_.\n\nAvoid using the ArtMethod\u0027s dex cache type array shortcut\nin runtime, preparing for its removal. We do not completely\nremove the shortcut yet because it is still used by array\nallocation entrypoints.\n\nFix ArgArray::BuildArgArrayFromObjectArray in reflection.cc\nto not ask for the parameter type to be resolved. It should\nhave been previously resolved when retrieving the Method.\n\nAlso partially revert\n    https://android-review.googlesource.com/310717\nbecause it relied on the removed AIOOBE check in the removed\nArtMethod::GetDexCacheResolvedType(). The removed check was\nsimply defensive but it could not be triggered without some\nmemory corruption.\n\nTest: m test-art-host\nBug: 30627598\nChange-Id: Ic45a5ff8c66b79429e440cbc08d67bf22a083682\n"
    },
    {
      "commit": "0d3998b5ff619364acf47bec0b541e7a49bd6fe7",
      "tree": "a4763c0660372f6311b612c09267cbbc2fe71e89",
      "parents": [
        "aa89a4c6fca095904521842c018399f1e3501a45"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 12 15:35:12 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 12 16:51:12 2017 +0000"
      },
      "message": "Revert \"Revert \"Make object allocation entrypoints only take a class.\"\"\n\nThis reverts commit f7aaacd97881c6924b8212c7f8fe4a4c8721ef53.\n\nChange-Id: I6756cd1e6110bb45231f62f5e388f16c044cb145\n"
    },
    {
      "commit": "f7aaacd97881c6924b8212c7f8fe4a4c8721ef53",
      "tree": "780209ac8e992fa63307062977f672aa5bb55d9e",
      "parents": [
        "2b615ba29c4dfcf54aaf44955f2eac60f5080b2e"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Jan 12 02:58:38 2017 +0000"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Jan 12 02:58:38 2017 +0000"
      },
      "message": "Revert \"Make object allocation entrypoints only take a class.\"\n\n960-default-smali64 is failing.\n\nThis reverts commit 2b615ba29c4dfcf54aaf44955f2eac60f5080b2e.\n\nChange-Id: Iebb8ee5a917fa84c5f01660ce432798524d078ef\n"
    },
    {
      "commit": "2b615ba29c4dfcf54aaf44955f2eac60f5080b2e",
      "tree": "0a2fe5f9243645a054d4aa094bff5a69cc1abb88",
      "parents": [
        "c9a060f2688599d4a402ee6234db46c2e9b7463f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 06 14:40:07 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 11 10:34:10 2017 +0000"
      },
      "message": "Make object allocation entrypoints only take a class.\n\nChange motivated by:\n- Dex cache compression: having the allocation fast path do a\n  dex cache lookup will be too expensive. So instead, rely on the\n  compiler having direct access to the class (either through BSS for\n  AOT, or JIT tables for JIT).\n- Inlining: the entrypoints relied on the caller of the allocation to\n  have the same dex cache as the outer method (stored at the bottom of\n  the stack). This meant we could not inline methods from a different\n  dex file that do allocations. By avoiding the dex cache lookup in\n  the entrypoint, we can now remove this restriction.\n\nCode expansion on average for Docs/Gms/FB/Framework (go/lem numbers):\n- Around 0.8% on arm64\n- Around 1% for x64, arm\n- Around 1.5% on x86\n\nTest: test-art-host, test-art-target, ART_USE_READ_BARRIER\u003dtrue/false\nTest: test-art-host, test-art-target,  ART_DEFAULT_GC_TYPE\u003dSS ART_USE_TLAB\u003dtrue\n\nChange-Id: I41f3748bb4d251996aaf6a90fae4c50176f9295f\n"
    },
    {
      "commit": "f4f7637ef078cbd0812432f5a4051858c80f6309",
      "tree": "7aa38858ff7af69ae2040bfb386d4a14dd371e96",
      "parents": [
        "0955e348436130df87ee8f2075b492a66c5232ef"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Dec 13 14:43:58 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Dec 13 14:43:58 2016 -0800"
      },
      "message": "ART: Make switch back-edge suspension point consistent\n\nBoth compiled code and mterp attribute a back-edge suspend point\nto the target. Make switch consistent by proactively updating\nthe frame\u0027s dex PC in that case.\n\nAdd another macro for reuse.\n\nBug: 31684812\nTest: m test-art-host-run-test-911-get-stack-trace\nTest: m ART_TEST_INTERPRETER\u003dtrue ART_TEST_JIT\u003dtrue ART_TEST_TRACE\u003dtrue test-art-host\nChange-Id: I9969cc4ffbc34cf1d8849938a1cd7e2c9aec462d\n"
    },
    {
      "commit": "8a0128a5ca0784f6d2b4ca27907e8967a74bc4c5",
      "tree": "0dec75200282ae5e49785395e97bd4e6459f1c09",
      "parents": [
        "60438b46090d22bb9b978196f5aa53fab3b89759"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 28 07:38:35 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Nov 29 11:11:46 2016 -0800"
      },
      "message": "ART: Add dex::StringIndex\n\nAdd abstraction for uint32_t string index.\n\nTest: m test-art-host\nChange-Id: I917c2881702fe3df112c713f06980f2278ced7ed\n"
    },
    {
      "commit": "fef0664fa7b480032f17c60f767bcca43a659d8a",
      "tree": "5b1f812aef3e300b7bef0bd5ad5a2fa5a8d5c38a",
      "parents": [
        "5ee771615a7e7752abb8b0d53122ca44137c4286"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Nov 25 16:07:11 2016 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Nov 25 16:07:11 2016 +0000"
      },
      "message": "ART: Throw InternalError rather than VirtualMachineError\n\nInstantiate InternalError instead of VirtualMachineError as the latter\nis abstract and not instantiable.\n\nChange-Id: I3e90b28a34bef02dd1c200c02cb832aa8dce10b3\n"
    },
    {
      "commit": "a5b09a67034e57a6e10231dd4bd92f4cb50b824c",
      "tree": "304be738f4fa528b7ad2676103eecc84c79eaeeb",
      "parents": [
        "dac7ad17c78387d15d7aefae0f852dddf5f37e34"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Nov 17 15:21:22 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 21 10:57:00 2016 -0800"
      },
      "message": "ART: Add dex::TypeIndex\n\nAdd abstraction for uint16_t type index.\n\nTest: m test-art-host\nChange-Id: I47708741c7c579cbbe59ab723c1e31c5fe71f83a\n"
    },
    {
      "commit": "3d617ac3d87f7fa98793406818e54b057bd701a1",
      "tree": "5230ceedfaf2928da0404fd71b64fa7f08439f21",
      "parents": [
        "b5cc1d1321e36d38cd48ae079438a8758b82edc1"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Oct 19 14:00:46 2016 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Oct 31 09:16:19 2016 +0000"
      },
      "message": "Getter/Setter support for invoke-polymorphic of invokeExact().\n\nTest: make test-art-host\nBug: 30550796\n\nChange-Id: I427a6e0afba88b223655ad1ba30843aaf255182b\n"
    },
    {
      "commit": "269cb43d6df76b52a42c1c7a9436c92bd0dcdad6",
      "tree": "6fb3dec2763ffdacdf1b31e4ed04c3f0c6cc5f81",
      "parents": [
        "d6435da102851e155acd12adc420e7df3db47903"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Oct 28 10:19:54 2016 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Oct 28 11:48:49 2016 +0000"
      },
      "message": "class_linker: Change allocation of MethodType dex_cache entries.\n\nWe allocate them regardless of the value of the runtime flag to\navoid needing changes to the compiler etc. The memory hit can be\nmitigated in production systems that don\u0027t use MethodHandles by\nsetting kDexCacheMethodTypeCacheSize to 0.\n\nAlso, add DCHECKS in the interpreter to make sure the runtime\nnever executes an invoke-polymorphic instruction when method handles\nare disabled.\n\nTest: make test-art-host\nBug: 30550796\nChange-Id: Id4b2065d99dc13625a51037b7d1a9f0ac5ff6121\n"
    },
    {
      "commit": "ef41db7a3f322a1feb305fdb457410c4cea94d00",
      "tree": "c03152c091ef62ab70f5be0a2fe3a965b189132c",
      "parents": [
        "1458e0c09fe0a3b9fa5fd7beb9b6077d1fc46b1d"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 25 15:08:01 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 26 15:25:40 2016 -0700"
      },
      "message": "Move interpreter to ObjPtr\n\nMoved most of interpreter, interpreter_common,\ninterpreter_switch_impl, and some of mterp to ObjPtr.\n\nBug: 31113334\n\nTest: test-art-host ART_TEST_INTERPRETER\u003dtrue\nTest: art/tools/run-libcore-tests.sh \u0027--mode\u003dhost\u0027 \u0027--variant\u003dX32\u0027 --debug\n\nChange-Id: I0935d18287e1332205c17c5a018aa167788ab897\n"
    },
    {
      "commit": "709b070044354d9f47641f273edacaeeb0240ab7",
      "tree": "3a8ac051d7c35076303984d0d892cdd396b60427",
      "parents": [
        "1a4de6a2453a3ad0310aca1a44e7e2d3b6f53bc1"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Oct 13 09:12:37 2016 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Oct 18 14:10:04 2016 -0700"
      },
      "message": "Remove mirror:: and ArtMethod deps in utils.{h,cc}\n\nThe latest chapter in the ongoing saga of attempting to dump a DEX\nfile without having to start a whole runtime instance.  This episode\nfinds us removing references to ArtMethod/ArtField/mirror.\n\nOne aspect of this change that I would like to call out specfically\nis that the utils versions of the \"Pretty*\" functions all were written\nto accept nullptr as an argument.  I have split these functions up as\nfollows:\n1) an instance method, such as PrettyClass that obviously requires\nthis !\u003d nullptr.\n2) a static method, that behaves the same way as the util method, but\ncalls the instance method if p !\u003d nullptr.\nThis requires using a full class qualifier for the static methods,\nwhich isn\u0027t exactly beautiful.  I have tried to remove as many cases\nas possible where it was clear p !\u003d nullptr.\n\nBug: 22322814\nTest: test-art-host\nChange-Id: I21adee3614aa697aa580cd1b86b72d9206e1cb24\n"
    },
    {
      "commit": "28bd2e4f151267b34b8e1eb19c489d8d547bbf5c",
      "tree": "d99ae3fe74ea63b83091898d830d3efe68cd479d",
      "parents": [
        "6e5fa09510c7280168e040382d27dd8b55760d9a"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 04 13:54:57 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 13 10:59:28 2016 -0700"
      },
      "message": "Move mirror::Class to use ObjPtr\n\nLeave the return types as non ObjPtr for now. Fixed moving GC bugs\nin tests.\n\nTest: test-art-host\n\nBug: 31113334\n\nChange-Id: I5da1b5ac55dfbc5cc97a64be2c870ba9f512d9b0\n"
    },
    {
      "commit": "9823e788ed3368ecf826c44bfa16ccabfcbe32f8",
      "tree": "59dee92dfd7518a98905c8313bdcb0a2ca2946cb",
      "parents": [
        "82d4838d6bb3480cd25327cedc5179fb2d86881c"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Aug 03 12:46:58 2016 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Oct 05 10:34:59 2016 +0100"
      },
      "message": "Basic implementation of invoke / invoke-polymorphic.\n\nBasic switch interpreter support for invoke-polymorphic. This change\nallows for virtual/interface and static invokes on method handles.\n\nSupport for direct invokes (including constructors) and field\ngetters and setters will be added in follow up changes.\n\nBug: 30550796\nTest: make test-art-host\n\nChange-Id: Ieb3a991d974060d930d56467908d5c7c11d0e38e\n"
    },
    {
      "commit": "8aea8dbca646074cc02d839be28ba3fd9863b0b8",
      "tree": "3cffbb3f1913302afeee21d6c45577073fb774e9",
      "parents": [
        "7c95b4e22897a6f14ef79ec6e547e2eed686814a",
        "9231f4e55d6e79e37880071e222c28141bf65f49"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Aug 24 17:09:42 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 24 17:09:43 2016 +0000"
      },
      "message": "Merge \"ART: Remove vestiges of GCC\""
    },
    {
      "commit": "9231f4e55d6e79e37880071e222c28141bf65f49",
      "tree": "929c75752d7dd5d667b5f2cdaa044ad83d0522eb",
      "parents": [
        "e99331f7a430b0b72142dd0b8b0689421489dcf6"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 23 17:35:19 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 23 18:20:12 2016 -0700"
      },
      "message": "ART: Remove vestiges of GCC\n\nWe no longer support GCC.\n\nChange-Id: I869ac6e5dcb166747e45236a0d313c7672bbf2de\nTest: m test-art-host\n"
    },
    {
      "commit": "51a0c4fe2dabeb21525d377047b68031b6fe0186",
      "tree": "83a02e40cd106e6decbf100870b2e931232820db",
      "parents": [
        "e99331f7a430b0b72142dd0b8b0689421489dcf6",
        "3aaa37bba53d6df0265793de48b4b0b57327e57a"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Aug 24 00:50:38 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 24 00:50:39 2016 +0000"
      },
      "message": "Merge \"creating workflow for mirror::String compression\""
    },
    {
      "commit": "3aaa37bba53d6df0265793de48b4b0b57327e57a",
      "tree": "ce795803f0f10003eb3d96d9348da620937675b3",
      "parents": [
        "792c98bb773c8c2390f9cbf774f85be9d9a75332"
      ],
      "author": {
        "name": "jessicahandojo",
        "email": "jessicahandojo@google.com",
        "time": "Fri Jul 29 14:46:37 2016 -0700"
      },
      "committer": {
        "name": "jessicahandojo",
        "email": "jessicahandojo@google.com",
        "time": "Tue Aug 23 15:12:26 2016 -0700"
      },
      "message": "creating workflow for mirror::String compression\n\nAll-ASCII String characters are stored in 8-bit blocks\ninstead of 16-bit. The compression has not taken place, but all\nworkflow are in the code already (changing kUseStringCompression in\nstring.h file to TRUE will enable the feature)\n\nNotes: Feature works on interpreter only without optimizing\n\nTest art: m ART_TEST_INTERPRETER\u003dtrue ART_TEST_OPTIMIZING\u003dfalse\n          test-art-host\n\nAlso tested with String tests from libcore/:\n1. libcore.java.lang.StringTest\n2. libcore.java.lang.StringBufferTest\n3. libcore.java.lang.StringBuilderTest\n4. libcore.java.lang.OldStringTest\n5. libcore.java.lang.OldStringBufferTest\n\nMemory improvement is 33% (from 6.03% to 4.03%, total String memory\nfrom all apps per total memory of all apps) measured on Angler\nwith Hprof tools\n\nBug: 31040547\nChange-Id: I9cc92c265ebf1305fc06b5fc33efd83797660cce\n"
    },
    {
      "commit": "5e26eb1dc8ea89b2ebf4ce4b40cbe18542758fbd",
      "tree": "ac8eaad8db47f667e3290e63f52f6e1c06f9fbad",
      "parents": [
        "cf834d00de838272cf28f2382ffc26fe716aae5c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 22 17:54:17 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 22 21:30:40 2016 -0700"
      },
      "message": "ART: Clean up interpreter includes\n\nMove goto-interpreter special-cased Clang declarations to goto\nimplementation file. Separate out declarations into their own\nheaders. Tag the declarations with thread safety annotations.\n\nMinor compile-time impact when running with -j1.\n\nChange-Id: I03664d4e7dc6361b2510a8c9beb693d23a657c9d\nTest: m test-art-host\nTest: m ART_TEST_INTERPRETER\u003dtrue test-art-host\n"
    },
    {
      "commit": "8ec3bd2b31ccbc9027b8e9b1949dd1804bb6d30f",
      "tree": "6cc457a060c7faade49229010bfe3119e55b254d",
      "parents": [
        "c218427ab96e521e0c4e9a3ffeb87e6c57eea0a5"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Aug 03 12:46:23 2016 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Aug 10 14:00:16 2016 +0100"
      },
      "message": "Instruction: Add new formats 45cc and 4rcc.\n\nThese are new 4 byte formats with the following properties.\n\n- The first three (16 bit) words of these instructions have the same\n  format as 35c and 3rc respectively.\n- The fourth 16 bit word encodes an additional constant index reference.\n\nThis change includes placeholder opcodes for invoke-polymorphic and\ninvoke-polymorphic/range which will be the first dex instructions that\nuse this new format. In addition to a method_idx that gives the invoked\nmethod, these instructions also provide a proto_idx which gives the\n(static) type signature of the call site.\n\nThe only reason these are included in this change is because we need\nan instruction with a given format to write a unit_test using the Instruction\nAPI.\n\nbug: 30550796\ntest: make test-art-host\n\nChange-Id: I02612ddee47169757175a8079d82f811f6545945\n"
    },
    {
      "commit": "14832efeb92334c562ebedef34e920d30e3cee69",
      "tree": "57d10c24966a46ae1c01861ee579ac6000326c45",
      "parents": [
        "c984725d0035e1925371757c38fed339b409e525"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Aug 05 11:44:32 2016 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Aug 09 13:47:49 2016 +0100"
      },
      "message": "Revert experimental lambda feature.\n\nThis is a revert of the following changes :\n\n30c475a2046951a81769c2db0b2dad66cd71e189.\nlambda: Minor capture-variable/liberate-variable clean-up after post-merge reviews.\n\n6918bf13eb855b3aa8ccdddda2d27ae8c60cec56.\nlambda: Experimental support for capture-variable and liberate-variable\n\nfc1ccd740b7c8e96dfac675cfc580122cd1b40a6.\nlambda: Infrastructure to support capture/liberate-variable dex opcodes\n\ne2facc5b18cd756a8b5500fb3d90da69c9ee0fb7.\nruntime: Add lambda box/unbox object equality\n\n2ee54e249ad21c74f29a161e248bebe7d22fddf1.\nruntime: Partially implement box-lambda and unbox-lambda experimental opcodes\n\n158f35c98e2ec0d40d2c032b8cdce5fb60944a7f.\ninterpreter: Add experimental lambda opcodes for invoke/create-lambda\n\na3bb72036f5454e410467f7151dc89f725ae1151.\nAdded format 25x to dexdump(2).\n\nPlus surrounding cleanups.\n\nTest: make test-art\nChange-Id: Ic6f999ad17385ef933f763641049cf721510b202\n"
    },
    {
      "commit": "542451cc546779f5c67840e105c51205a1b0a8fd",
      "tree": "11e09bb5abaee12dddffefbe7e425291076dfa7a",
      "parents": [
        "85c4a4b8c9eabfe16e4e49f9b4aa78c1bf4be023"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 26 09:02:02 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 01 18:54:48 2016 -0700"
      },
      "message": "ART: Convert pointer size to enum\n\nMove away from size_t to dedicated enum (class).\n\nBug: 30373134\nBug: 30419309\nTest: m test-art-host\nChange-Id: Id453c330f1065012e7d4f9fc24ac477cc9bb9269\n"
    },
    {
      "commit": "56fdd0e63812764bbeb8cc52e376d3fd1f270052",
      "tree": "6988e995bf02f788066fb6e748cd3049fe87d31a",
      "parents": [
        "9d05b59a8595cf7eeece1795eb65b6b8706aad45"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Apr 28 14:56:54 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 29 17:33:22 2016 -0700"
      },
      "message": "ART: Disambiguate access-checks mode from lock-counting\n\nLock-counting (when structural locking verification failed) is a\nspecial sub-mode of access-checks and must be disambiguated, because\nwe currently use access-checks mode class-wide when at least one\nmethod soft-fails, but do not stop the compiler/JIT to compile\nthe \"working\" methods. So we may end up in the access-checks\ninterpreter for a working method through deopt without knowing\nwhich locks are already held.\n\nBug: 28351535\n\n(cherry picked from commit f517e283d477dd2ae229ee3f054120c6953895db)\n\nChange-Id: I083032f064d88df8f8f0611ad8b57d1b39cd09fb\n"
    },
    {
      "commit": "71cd50fb67fa48667b0ab59aa436a582c04ba43d",
      "tree": "9f99f187060b0ef3a118120db367555d8f757f0c",
      "parents": [
        "9b863613454ee139370d24e65adb41fabe75d482"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 14 15:00:33 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 15 15:42:31 2016 +0100"
      },
      "message": "Add weight to compiled/interpreter transitions.\n\nAlso:\n- Cleanup logging.\n- Check ArtMethod status before adding compilation requests.\n- Don\u0027t request osr compilation if we know AddSamples does not come\n  from a back edge.\n\nBug: 27865109\n\nChange-Id: I84512f7d957b61ce2458360ed430adb151830278\n"
    },
    {
      "commit": "274fe4adcb0610a9920be7814d9beb9cac6417ce",
      "tree": "4a5c41dd2568869ceaf0a510e37065a606f512fb",
      "parents": [
        "6990775e323cd9164d6cc10955a047b9d9f15f32"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Apr 12 16:33:24 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 13 17:34:53 2016 +0100"
      },
      "message": "Remove the JIT from the instrumentation framework.\n\nThis was slowing down the interpreter for no reason.\nAlso, call AddSamples for invoke-static and invoke-direct.\n\nChange-Id: I7b5641097f7741dd32feb1ce6af739fd27fb37c2\n"
    },
    {
      "commit": "1d011d9306fd4ff57d72411775d415a86f5ed398",
      "tree": "fadba83b9fb32840ff777948ace3bd8eb477e38f",
      "parents": [
        "82a0229e949eb3ea209c2bd33fe2d60908f5dbc7"
      ],
      "author": {
        "name": "Bill Buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Apr 04 16:59:29 2016 +0000"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Apr 08 09:04:10 2016 -0700"
      },
      "message": "Revert \"Revert \"Revert \"Revert \"ART: Improve JitProfile perf in arm/arm64 mterp\"\"\"\"\n\nBug: 28081559\n\nThis reverts commit 961ea9fe42edcc2c57469bf451d1ca421da5cd59.\n\nChange-Id: I98a5bb8112646706ae7bd73bf6393cb956466be3\n"
    },
    {
      "commit": "93e94f228f7a9ec5c2a29553010e585d583ac530",
      "tree": "4f01e0f8bd8c4256b8a2f061f7d9502a8bb946ab",
      "parents": [
        "f2197e43f42499be852a0fce2d755f25e2007be8"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Apr 07 13:52:48 2016 -0700"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Apr 07 15:27:01 2016 -0700"
      },
      "message": "ART: Fix interpreter single-step when doing OSR\n\nRecords an interpreter exit when in single-step mode and we\u0027ve\nfinished processing the method via on-stack replacement.\n\nChange-Id: I7a7d9ee9e4f3fbf7f829d9f54eca0e7c64395003\n"
    },
    {
      "commit": "961ea9fe42edcc2c57469bf451d1ca421da5cd59",
      "tree": "eb1930308f9f64a108e3f2387faca90cff869509",
      "parents": [
        "6b7d2c09b4710503a72ff5de31bff5cb23a3a921"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Apr 01 12:02:58 2016 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Apr 01 12:02:58 2016 -0700"
      },
      "message": "Revert \"Revert \"Revert \"ART: Improve JitProfile perf in arm/arm64 mterp\"\"\"\n\nThis reverts commit 4a8ac9cee4312ac910fabf31c64d28d4c8362836.\n\n570-checker-osr intermittently failing.\n\nBug: 27939339\n"
    },
    {
      "commit": "4a8ac9cee4312ac910fabf31c64d28d4c8362836",
      "tree": "a9d662cb43a3fe1c071618ef78f772655bfc4442",
      "parents": [
        "ec898396658bc6a36e2b3c32569fbcb034d60e22"
      ],
      "author": {
        "name": "Bill Buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Mar 25 13:16:55 2016 +0000"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Mar 29 15:48:45 2016 -0700"
      },
      "message": "Revert \"Revert \"ART: Improve JitProfile perf in arm/arm64 mterp\"\"\n\nReady for review.\n\nThis reverts commit 6aef867f4d1a98a12bcdd65e9bf2ff894f0f2d7e.\n\nChange-Id: I5d53ed2bedc7e429ce7d3cdf80b6696a9628740e\n"
    },
    {
      "commit": "6aef867f4d1a98a12bcdd65e9bf2ff894f0f2d7e",
      "tree": "cda140806a091805213edca2708e69337f6869ef",
      "parents": [
        "1cb8689ccc23fd513c5472911dd07e44b55e9c8d"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Mar 25 11:27:48 2016 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Mar 25 11:27:48 2016 +0000"
      },
      "message": "Revert \"ART: Improve JitProfile perf in arm/arm64 mterp\"\n\nThis reverts commit c1d6b341eed646e5adafc6c4fd4e3748f0292368.\n"
    },
    {
      "commit": "c1d6b341eed646e5adafc6c4fd4e3748f0292368",
      "tree": "ddee928954b03a919ce601f12876f1fe161d577a",
      "parents": [
        "eecf60d51b481647c8508f22b3d6ce437773ea0c"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Tue Mar 01 15:03:16 2016 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Mar 23 11:11:26 2016 -0700"
      },
      "message": "ART: Improve JitProfile perf in arm/arm64 mterp\n\nART currently requires two profiling-related things from the\ninterpreters: hotness updates and OSR switch checks.  The hotness\nupdates previously used the existing instrumentation framework - which\nis flexible, but quite heavyweight.  For most things, the\ninstrumentation framework overhead is acceptable, but because we do a\nhotness update on every backwards branch the overhead is unacceptable.\nPrior to this CL, branch profiling dominates interpreter cost.\n\nHere, we bypass the instrumentation framework for hotness updates\nand deliver a significant performance improvement.  Running\ninterpreter-only (dalvikvm -Xint) on a Nexus 6, we see the logic\nsubtest of Caffeinemark improving from 2600 to 9200, and the\noverall score going from 1979 to over 3000.  Compared to the\nC++ switch interpreter, we see a 6x improvement on the branchy logic\nsubtest and a 2.6x improvement overall.\n\nCompared with the previous mterp which did not have support for\njit profiling, we see a few (1% to 5%) performance loss on the\nstandard command-line benchmarks.  I consider this acceptable\n(we could create an alternate non-profiling mterp which would\nhave no penalty, but I don\u0027t consider this overhead big enough to\njustify that).\n\nChange-Id: I50b5b8c5ed8ebda3c8b4e65d27ba7393c3feae04\n"
    },
    {
      "commit": "f1dcaccfac4a9e022ea49752a774552b2f791489",
      "tree": "2e11cbb0bead0b24dd527f307a58a0588e707901",
      "parents": [
        "db11e7ecc9c902ffde6336c261fe236299a81944"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Wed Feb 24 14:24:24 2016 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Feb 25 05:47:09 2016 -0800"
      },
      "message": "ART: Profile all branches for on-stack replacement\n\nChange the switch, goto and mterp interpreters to profile\nnot-taken as well as taken branches.  This allows for on-stack\nreplacement when the cfg has been rearranged such that the loop\nheader was originally the fallthrough of a Dalvik byte-code branch.\n\nNote that this increases the already-heavy cost of branch profiling.\nMeasuring on a Nexus 6 using a very branchy benchmark (logic subtest\nfrom Caffeinemark), we see:\n\n            No profiling     Taken only     Taken \u0026 not-taken\nmterp          9728            3434              2384\nC++ goto       3914            2422              2037\nC++ switch     2986            2411              2112\n\nAs measured, the cost of branch profiling is dominating execution\ntime.  This will be addressed in follow-up CLs.\n\nChange-Id: Ibc858f317398dd991ed8e4f3c3d72bd4c9a60594\n"
    },
    {
      "commit": "b331febbab8e916680faba722cc84b66b84218a3",
      "tree": "35f985b021e476914bfe91492da23fee218014a7",
      "parents": [
        "586996afc905518ed926e4680aab67bedabec9b7"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Feb 05 16:51:53 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Feb 05 17:11:54 2016 +0000"
      },
      "message": "Revert \"Revert \"Implement on-stack replacement for arm/arm64/x86/x86_64.\"\"\n\nThis reverts commit bd89a5c556324062b7d841843b039392e84cfaf4.\n\nChange-Id: I08d190431520baa7fcec8fbdb444519f25ac8d44\n"
    },
    {
      "commit": "d6b48dbe715fbf1431394d2b6ef75cb19a4012dd",
      "tree": "f736903d0504a0198dca09cfb27913b6d806da22",
      "parents": [
        "1d81df8ff1e5bc820d021fa02c552f2b53182b36"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jan 28 15:48:55 2016 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jan 28 16:11:04 2016 -0800"
      },
      "message": "ART: Fix single-step interpretation for mterp\n\nFor bring-up (and failover) purposes, mterp can bail out to the\nswitch interpreter to handle a single opcode.  This CL fixes the\nhandoff of the result register (a bug that was masked by an earlier\nrevision which passed it around by reference, rather than by value.\n\nChange-Id: Iba9e1576f52b3660348c89466438bdc0526227d0\n"
    },
    {
      "commit": "734f3aa9f758236b6f1ace6347895af90b0d813d",
      "tree": "5982ad1d7df2062e0bd5deb023b39997a3a66a98",
      "parents": [
        "de31ca62015e94016155a99a268ea798ab1ef75c"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jan 28 14:20:06 2016 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Thu Jan 28 15:58:45 2016 -0800"
      },
      "message": "Fix \"Never Interpret\" option for all interpreters\n\nCL 196596 added support for an option to bypass interpretation.\nHowever, it only covers 2 our of 3 interpreters (missing mterp).\nThis change moves the control up a level to the common interpreter\nentry where it will take effect before we select which interpreter\nto use.\n\nAlso, it corrects a somewhat academic bug in that the existing\ncode that assumes that (dex_pc \u003d\u003d 0) means that we just entered a\nmethod.  If a method\u0027s dex code internally branched to address 0,\nwe could issue bogus method entry events.  By moving this test up\na level, we should avoid this situation.  Note, though, that dx\nwould never generate this pattern, and it\u0027s hard to imagine even\nhand-generated dex code that would trigger a deoptimization in this\nsituation.\n\nChange-Id: I6684bbf63570e02f5b01ce423c656889a890de7d\n"
    },
    {
      "commit": "05d241565f36df825cf56a4f1b61bfb7e4dcb056",
      "tree": "4b74483b1c26640c6ca150fbf4d070c7a3a518f0",
      "parents": [
        "f032f3afe513093c508434b17ff1921a114c4424"
      ],
      "author": {
        "name": "Siva Chandra",
        "email": "sivachandra@google.com",
        "time": "Tue Jan 05 17:43:17 2016 -0800"
      },
      "committer": {
        "name": "Tamas Berghammer",
        "email": "tberghammer@google.com",
        "time": "Wed Jan 27 15:09:41 2016 +0000"
      },
      "message": "Add option to never interpret.\n\nChange-Id: Ib6d6170fa60c77c2e6a8844964f14fa0de4c9e7b\n"
    },
    {
      "commit": "81f0f953c4bb159997046c962d44cb1898b1778d",
      "tree": "dffd9e7cdd53da2771770a59832e76769b696c0b",
      "parents": [
        "a27d59b2b98a02b2e9e5dbe40623e7a97aa1e8d8"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 20 16:25:19 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 21 14:19:55 2016 +0000"
      },
      "message": "Move backward branch instrumentation to all branch.\n\nThis is in preparation for osr, and later dead branch profiling.\n\nChange-Id: I4597c0784c894c310f295dd534967d67dcefa419\n"
    },
    {
      "commit": "1452bee8f06b9f76a333ddf4760e4beaa82f8099",
      "tree": "8ffb80498cd8fdff66a4ab272723cf4d4e69e57b",
      "parents": [
        "7f9ea1451bb74055ee5d51ae04fc869faa06cbdd"
      ],
      "author": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Fri Mar 06 14:43:04 2015 -0800"
      },
      "committer": {
        "name": "buzbee",
        "email": "buzbee@google.com",
        "time": "Mon Jan 11 13:04:49 2016 -0800"
      },
      "message": "Fast Art interpreter\n\nAdd a Dalvik-style fast interpreter to Art.\nThree primary deficiencies in the existing Art interpreter\nwill be addressed:\n\n1.  Structural inefficiencies (primarily the bloated\n    fetch/decode/execute overhead of the C++ interpreter\n    implementation).\n2.  Stack memory wastage.  Each managed-language invoke\n    adds a full copy of the interpreter\u0027s compiler-generated\n    locals on the shared stack.  We\u0027re at the mercy of\n    the compiler now in how much memory is wasted here.  An\n    assembly based interpreter can manage memory usage more\n    effectively.\n3.  Shadow frame model, which not only spends twice the memory\n    to store the Dalvik virtual registers, but causes vreg stores\n    to happen twice.\n\nThis CL mostly deals with #1 (but does provide some stack memory\nsavings).  Subsequent CLs will address the other issues.\n\nCurrent status:\n   Passes all run-tests.\n   Phone boots interpret-only.\n   2.5x faster than Clang-compiled Art goto interpreter on fetch/decode/execute\n       microbenchmark, 5x faster than gcc-compiled goto interpreter.\n   1.6x faster than Clang goto on Caffeinemark overall\n   2.0x faster than Clang switch on Caffeinemark overall\n   68% of Dalvik interpreter performance on Caffeinemark (still much slower,\n       primarily because of poor invoke performance and lack of execute-inline)\n   Still nearly an order of magnitude slower than Dalvik on invokes\n       (but slightly better than Art Clang goto interpreter.\n   Importantly, saves ~200 bytes of stack memory per invoke (but still\n       wastes ~400 relative to Dalvik).\n\nWhat\u0027s needed:\n   Remove the (large quantity of) bring-up hackery in place.\n   Integrate into the build mechanism.  I\u0027m still using the old Dalvik manual\n       build step to generate assembly code from the stub files.\n   Remove the suspend check hack.  For bring-up purposes, I\u0027m using an explicit\n       suspend check (like the other Art interpreters).  However, we should be\n       doing a Dalvik style suspend check via the table base switch mechanism.\n       This should be done during the alternative interpreter activation.\n   General cleanup.\n   Add CFI info.\n   Update the new target bring-up README documentation.\n   Add other targets.\n\nIn later CLs:\n   Consolidate mterp handlers for expensive operations (such as new-instance) with\n       the code used by the switch interpreter.  No need to duplicate the code for\n       heavyweight operations (but will need some refactoring to align).\n   Tuning - some fast paths needs to be moved down to the assembly handlers,\n       rather than being dealt with in the out-of-line code.\n   JIT profiling.  Currently, the fast interpreter is used only in the fast\n       case - no instrumentation, no transactions and no access checks. We\n       will want to implement fast + JIT-profiling as the alternate fast\n       interpreter.  All other cases can still fall back to the reference\n       interpreter.\n   Improve invoke performance.  We\u0027re nearly an order of magnitude slower than\n       Dalvik here.  Some of that is unavoidable, but I suspect we can do\n       better.\n   Add support for our other targets.\n\nChange-Id: I43e25dc3d786fb87245705ac74a87274ad34fedc\n"
    },
    {
      "commit": "3108daf19ab1e8e9a5ebf980df1db84cef54770b",
      "tree": "14c4a80c5426819c50275d91ce3f889e93721b87",
      "parents": [
        "95f7bbcd991fbfaead438a2866354714eb32af38"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 24 16:32:33 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Nov 24 16:32:33 2015 +0000"
      },
      "message": "Add backward branch instumentation to the switch interpreter.\n\nChange-Id: I0328daa86d5f19311ab3bd6246a1c3e4b40b0ba9\n"
    }
  ],
  "next": "3a0909248e04b22c3981cbf617bc2502ed5b6380"
}
