)]}'
{
  "log": [
    {
      "commit": "323844002e54243e295497e7f829e46a533da621",
      "tree": "e6219f651332ee140042e4e0d4c975919f4fe9bf",
      "parents": [
        "297a0533d2e3f1d49f0b73c5d1e3b09ce0418de2"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 17 20:06:44 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 18 13:12:57 2019 +0000"
      },
      "message": "jitzygote: Handle case of methods having the resolution stub.\n\nWe need to cache the compiled code until the class is initialized.\n\nTest: test.py\nTest: jitzygote config boots\nBug: 119800099\nChange-Id: Ib7a1efc3e101d9dabfad963621a1fe4a142e9b29\n"
    },
    {
      "commit": "d5fd5c3bbb44880e440c6920ce5ed56b5383c788",
      "tree": "2cf8a6354e5509c5a5e0bc2937c24fe7e03a12b1",
      "parents": [
        "1a6f9fcce199f437a5945dfe0163188b923adb28"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 02 14:46:32 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 04 08:17:30 2019 +0000"
      },
      "message": "Make .bss stores atomic release operations.\n\nAnd rely on architecture-dependent behavior for the .bss\nentry loads.\n\nThis fixes theoretical races when one thread updates the\n.bss entry and another uses it immediately thereafter;\npreviously we did not ensure correct memory visibility.\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\nChange-Id: Ie7b7969eb355025b9c9205f8c936e702861943f4\n"
    },
    {
      "commit": "0d4567f26701abae84b02389c379843c1dc851a8",
      "tree": "f665e6d5db5af79a4afa3b97cd7cdb7a2069da3f",
      "parents": [
        "cc08c50948d8b2a93b53a327717c7b2a146ac754"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu May 30 22:45:40 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sun Jun 30 18:04:44 2019 +0000"
      },
      "message": "Stack maps: Refactor constructors.\n\nCreate dedicated static methods instead of passing flags.\nThis creates dedicated methods for the purpose and merges\nconstructor and decoding into single optimized method.\n\nThis speeds up CodeInfo by 10%, and maps startup by 0.1%.\n\nTest: ./art/test.py -b --host\nChange-Id: Ic7d43e22bca0be9fb13bc2c7544ebfdf46798cfe\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": "743600d5ae654817a5d81179fb480816e0cd139d",
      "tree": "b7d32337b7edda269d9ebc72b73551eff1b791f7",
      "parents": [
        "bd613eced14bc56ece6beb276addab0f40337163"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 04 10:49:52 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 04 14:58:29 2019 +0000"
      },
      "message": "ARM/ARM64: Clean up artFindNativeMethod().\n\nPass the Thread::Current() as an argument just like we\ndo for other architectures.\n\nTest: aosp_taimen-userdebug boots.\nTest: testrunner.py --target --optimizing\nChange-Id: I1dfb019da1018f493ee55ff28bd20e2db2258eb9\n"
    },
    {
      "commit": "e42a4b95eed312e6f7019645f4c66b2d77254433",
      "tree": "dd150dd4651180c5fbba3a4fd90f8ca8a3f14e9d",
      "parents": [
        "67ba872df798271d2960be27c7f1e813259feabc"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sun May 26 00:10:25 2019 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sun May 26 23:47:47 2019 +0000"
      },
      "message": "Optimize stack maps: add fast path for no inline info.\n\nConsumers of CodeInfo can skip significant chunks of work\nif they can quickly determine that method has no inlining.\n\nStore this fact as a flag bit at the start of code info.\nThis changes binary format and adds \u003c0.1% to oat size.\n\nI added the extra flag field as the simplest solution for now,\nalthough I would like to use it for more things in the future.\n(e.g. store the special cases of empty/deduped tables in it)\n\nThis improves app startup by 0.4% (maps,speed).\nPMD on golem seems to gets around 15% faster.\n\nBug: 133257467\nTest: ./art/test.py -b --host --64\nChange-Id: Ia498a31bafc74b51cc95b8c70cf1da4b0e3d894e\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": "552a13415573da19eafa46e1ac00fb0eb68f2b23",
      "tree": "8cae5f3602d8f8e65cd3cbc349af17d785128605",
      "parents": [
        "0dda8c84938d6bb4ce5a1707e5e109ea187fc33d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 31 10:56:47 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 16 14:44:09 2019 +0000"
      },
      "message": "ART: Optimize StringBuilder append pattern.\n\nRecognize appending with StringBuilder and replace the\nentire expression with a runtime call that perfoms the\nappend in a more efficient manner.\n\nFor now, require the entire pattern to be in a single block\nand be very strict about the StringBuilder environment uses.\nAlso, do not accept StringBuilder/char[]/Object/float/double\narguments as they throw non-OOME exceptions and/or require a\ncall from the entrypoint back to a helper function in Java;\nthese shall be implemented later.\n\nBoot image size for aosp_taimen-userdebug:\n - before:\n   arm/boot*.oat: 19653872\n   arm64/boot*.oat: 23292784\n   oat/arm64/services.odex: 22408664\n - after:\n   arm/boot*.oat: 19432184 (-216KiB)\n   arm64/boot*.oat: 22992488 (-293KiB)\n   oat/arm64/services.odex: 22376776 (-31KiB)\nNote that const-string in compiled boot image methods cannot\nthrow, but for apps it can and therefore its environment can\nprevent the optimization for apps. We could implement either\na simple carve-out for const-string or generic environment\npruning to allow this pattern to be applied more often.\n\nResults for the new StringBuilderAppendBenchmark on taimen:\n  timeAppendLongStrings: ~700ns -\u003e ~200ns\n  timeAppendStringAndInt: ~220ns -\u003e ~140ns\n  timeAppendStrings: ~200ns -\u003e 130ns\n\nBug: 19575890\nTest: 697-checker-string-append\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\nTest: vogar --benchmark art/benchmark/stringbuilder-append/src/StringBuilderAppendBenchmark.java\nChange-Id: I51789bf299f5219f68ada4c077b6a1d3fe083964\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": "7989ac9ef0f50db26ce5844e7e6f9a659994c244",
      "tree": "a71974b358b1b06cdd9d740b83cbab41493db4b3",
      "parents": [
        "6dfdfef85b210dc104a7cd221c6717e1a2123a13"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 10 12:42:30 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 12 16:10:51 2019 +0000"
      },
      "message": "Save the JIT compiled code when the class isn\u0027t initialized yet.\n\nWhen a class isn\u0027t initialized, we put resolution stubs to its\nstatic methods. In order to fetch the compiled code at the point of\ninitialization, save it in the profiling info.\n\nBug: 119800099\nTest: start an app, no JIT compilation of boot classpath methods\nChange-Id: I32b947318dbcb1010c94a11b51ea39d992d247e3\n"
    },
    {
      "commit": "21a6ec5a5e9d392e33e4febffaa581da4d4855f2",
      "tree": "f15a490e54d1076765c558583dc0447ce4e60952",
      "parents": [
        "9298875403a470320c7e6a7731522f78583ca124"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Mar 28 10:55:50 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Apr 02 16:39:07 2019 +0000"
      },
      "message": "ART: Add VLOG to GenericJNI\n\nAdd a VLOG(third_party_jni) that details the call, that is, print\nthe Java method and the target\u0027s address.\n\nBug: 128869974\nTest: m test-art-host\nChange-Id: I335115924c0f040d939f3bb55237f7e253b7a549\n"
    },
    {
      "commit": "f52d92fce224c86491d9b0fd6fca805564119426",
      "tree": "fbf38f272a980e965627918d9dc6bbb536395c00",
      "parents": [
        "e660f7232a19a2c173f562b8e0987755a78ee298"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 29 12:33:02 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Apr 01 09:37:59 2019 +0000"
      },
      "message": "ObjPtr\u003c\u003e-ify Monitor/-Pool.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nBug: 31113334\nChange-Id: I2d2ebc5ef56e73e5678e0cfcd84c479611dfcca8\n"
    },
    {
      "commit": "4617d5823c8e7841fed813b3b9c72664d7fd4dc6",
      "tree": "9eafbee06717e02a2c4acd5d7ce1e6601955356e",
      "parents": [
        "d7e9bbf092b5a61048358fd54183526ef12284af"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 28 13:48:31 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 29 09:50:00 2019 +0000"
      },
      "message": "ObjPtr\u003c\u003e-ify mirror::Object::As*(), fix stale refs in test.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: Ia04c4996f5cbfa1f26acbadcd747342c57b1aac3\n"
    },
    {
      "commit": "d7e9bbf092b5a61048358fd54183526ef12284af",
      "tree": "620cee17c499bdb23217224b0b1332408d725a6e",
      "parents": [
        "bb206de72135271e66e58576b1196f3e08d5b6fd"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 28 13:18:57 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 29 09:50:00 2019 +0000"
      },
      "message": "Clean up explicit conversions to ObjPtr\u003c\u003e.\n\nAdd an ObjPtr\u003c\u003e::DownCast() overload that takes a plain\npointer and remove unnecessary calls to MakeObjPtr(),\nusually preceding DownCast(). Move the MakeObjPtr() to\ncommon_art_test.h .\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: I2a243b6d8f3b2e773396dfc53b659c5f7d9ea44a\n"
    },
    {
      "commit": "3b45890cf987c0b57965acd78958cd8eca487b8e",
      "tree": "18a3dd853e9829873688a6a61bda39dd681b2a27",
      "parents": [
        "423bebb17f15c3867a52315f0ae421f08f14544f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 26 17:08:41 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 27 09:45:20 2019 +0000"
      },
      "message": "ObjPtr\u003c\u003e-ify mirror::Throwable.\n\nAnd do some cleanup after previously submitted changes.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: I4f8e118bb385a9cba464a564b15addc1c7306ac2\n"
    },
    {
      "commit": "423bebb17f15c3867a52315f0ae421f08f14544f",
      "tree": "97bdf50c7144ae21e6abfe8bdc26858a6a10f94d",
      "parents": [
        "93d99f3665cbd890509f4c707e1a62c5f26d320e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 26 15:17:21 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 27 09:45:20 2019 +0000"
      },
      "message": "ObjPtr\u003c\u003e-ify mirror::ObjectArray.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: I611b3e49d3feed306f6cd35d2b662a1e727e24c6\n"
    },
    {
      "commit": "179b7c61ea6769b99f70c80a7a89cbb212423ec2",
      "tree": "06130898bfb2d8c3f71f4fe181277f20e1942726",
      "parents": [
        "c8b7d445e02b752a68d824e2bc69658dfb76288a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 22 13:38:57 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 25 16:54:37 2019 +0000"
      },
      "message": "ObjPtr\u003c\u003e-ify String allocations, fix stale refs.\n\nObjPtr\u003c\u003e-ify String allocation functions and related code\nand remove some unnecessary calls to ObjPtr\u003c\u003e::Ptr(). Fix\nstale reference uses in reference_table_test and stub_test.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: I42927fb8b7240e5132188f73318b2ccb218748fd\n"
    },
    {
      "commit": "4bb2af5e6163cf68ec65c5497983303302a15a09",
      "tree": "6cc72eae79472645b2c4833acb69f74849e43b0a",
      "parents": [
        "975b77427413977665f3be66d02e1d164df1efbc"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 22 11:09:19 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 22 13:08:16 2019 +0000"
      },
      "message": "ObjPtr\u003c\u003e-ify entrypoint utils.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --interpreter\nBug: 31113334\nChange-Id: Id05ce5b827b5c11a0fa796bca0b939e29ecf3c5f\n"
    },
    {
      "commit": "3dacdd6343ea9a6471692914c7a9dff66d6453c7",
      "tree": "5e0a3b8f99e914a7fbd49822e5c8fb1bd4709f5c",
      "parents": [
        "939798e6a565a92e597136c589428e89c28bffd5"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Mar 12 15:45:47 2019 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Mar 12 09:52:59 2019 -0700"
      },
      "message": "Revert^4 \"Remove Global deopt requirement for several jvmti events\"\n\nIt was possible for the top frame of a thread to enter the\nartQuickToInterpreterBridge during runtime shutdown. This could be\ncaused by the libjdwp agent. If this happens the caller of the frame\nwill be \u0027null\u0027, which could cause a segv if not detected correctly.\n\nThis reverts commit 939798e6a565a92e597136c589428e89c28bffd5.\n\nReason for revert: Fixed issue that could cause crash during process\n                   shutdown.\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\nTest: ./test.py --host\n\nChange-Id: I2aad1705c761edb4ed788cec4fc8a3068d67aee5\n"
    },
    {
      "commit": "939798e6a565a92e597136c589428e89c28bffd5",
      "tree": "3274ff355163df18cd2d7343ce0d34214f9d09c9",
      "parents": [
        "a55e8b5c9827cc4dc4e7f7c7ee07ef1fdafc35e0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 12 14:26:22 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 12 14:26:42 2019 +0000"
      },
      "message": "Revert \"Revert^2 \"Remove Global deopt requirement for several jvmti events\"\"\n\nThis reverts commit a75e5892fba6d0208f33e9ab8e19e732daf94996.\n\nReason for revert: Fails jdwp tests.\n\nChange-Id: Ic883f4f0108b07f1609c6c6a9565eae5903bfd2c\n"
    },
    {
      "commit": "a75e5892fba6d0208f33e9ab8e19e732daf94996",
      "tree": "3daff8c3ce1608bacba7358711ccf9bd61c0bb05",
      "parents": [
        "dd83a40a3c4fea0d917577de96742900a61ab548"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Mar 11 15:49:40 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Mar 11 21:59:44 2019 +0000"
      },
      "message": "Revert^2 \"Remove Global deopt requirement for several jvmti events\"\n\nThis reverts commit ad344b6a14feba90a06a205760e9bc766c56cab0.\n\nJit-on-first-use would cause the runtime to skip sending FramePop\nevents for exceptions in some circumstances due to longjmp-ing over\nthe frames. This requires forcing jit off from the first instant a\nthread can get frame popped events, which is unfortunate.\n\nReason for revert: Fixed issue causing 1925 to fail on\n                   jit-on-first-use and redefine-stress\nTest: ./test.py --host\nTest: ./art/test/testrunner/run_build_test_target.py -j50 art-jit-on-first-use\n\nChange-Id: I6ec2a799db1041262a055be10e1af1faece6f2fc\n"
    },
    {
      "commit": "ad344b6a14feba90a06a205760e9bc766c56cab0",
      "tree": "47801fc5b432b0baf544bb8fd522a9fd3b567a7e",
      "parents": [
        "739383c80684eeb41d380ca5d18e1e9a1fe9fd7f"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Mar 09 17:49:52 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Mar 09 21:13:15 2019 +0000"
      },
      "message": "Revert \"Remove Global deopt requirement for several jvmti events\"\n\nThis reverts commit 334630ee9dffdd1932c1ee641d938f25362a4c1a.\n\nReason for revert: 1924-frame-pop-toggle fails on some configs.\n\nChange-Id: I5ed3846e0dfff09c67a468f319ff516e14c44e61\n"
    },
    {
      "commit": "334630ee9dffdd1932c1ee641d938f25362a4c1a",
      "tree": "81957d634aa76967d97c89014eb69158682b0128",
      "parents": [
        "5b76c16cca1984209e838ada4d79e370d7fda431"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Mar 04 15:08:04 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Mar 08 04:07:45 2019 +0000"
      },
      "message": "Remove Global deopt requirement for several jvmti events\n\nThe JVMTI_EVENT_SINGLE_STEP, JVMTI_EVENT_FIELD_MODIFICATION,\nJVMTI_EVENT_METHOD_EXIT, JVMTI_EVENT_SINGLE_FIELD_ACCESS, and\nJVMTI_EVENT_FRAME_POP events would all deoptimize all threads in all\ncases when enabled. This changes the behavior to instead only\ndeoptimize individual threads when possible. This should make some\ndebugger interactions faster.\n\nTest: ./test.py --host -j72\nTest: ./art/tools/run-libjdwp-tests.sh --mode\u003dhost\n\nChange-Id: I42513cb17fd1144aeb03ca11afd3e3b05e918ce2\n"
    },
    {
      "commit": "62e7c097988a52add5f51640ff8cfd79229a9dbb",
      "tree": "bbdc0ab64f8f6dffd8fb38029b8fab7becd72144",
      "parents": [
        "e7bd7aa01c05ed8ed7d2227f5fc7c4e8ea0861cf"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 08 09:43:01 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 08 14:15:24 2019 +0000"
      },
      "message": "Put the deoptimized method in the trace tag.\n\nUseful when debugging with a trace.\n\nTest: m\nChange-Id: I59cb5d6810acdeb7cdd40604f8b123cb42aa8be7\n"
    },
    {
      "commit": "7fbc4a59ba2e60d869313d7961662430df83b2cb",
      "tree": "59520285df8d2075412ddc566a0d4d96d4c7e109",
      "parents": [
        "7cc45fd1dbcf5704e442d0443e437aa2ae3fe21b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 28 08:26:47 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 06 11:37:19 2018 -0800"
      },
      "message": "ART: Move to using locks.h instead of mutex.h\n\nWhen only annotating lock requirements, use locks.h.\n\nBug: 119869270\nTest: mmma art\nChange-Id: I1608b03254712feff0072ebad012c3af0cc3dda4\n"
    },
    {
      "commit": "c1896c9a0e15df3a1b9a3a19bcd2a933b654fe06",
      "tree": "b68a5f5163f8da0da87d671a225addaa2a13095f",
      "parents": [
        "f2970cd870948a6ee1c8ecd30c9c3147d05aa0be"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 29 11:33:18 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 29 11:33:18 2018 -0800"
      },
      "message": "C++17 compatibility: make WITH_TIDY\u003d1 happy again.\n\nBug: http://b/111067277\nTest: builds\nChange-Id: I8b69ea3815e14bb6eb27f40c0dd01a85b340a355\n"
    },
    {
      "commit": "076c9da66b606057109e5fb2902d28129d120b96",
      "tree": "fb0705380c3d1600a08c0e95ed581a967bdf0da0",
      "parents": [
        "1ad1254db5a7d44775840339240a10deb148034b",
        "7e09737125ddb8c6f243ac1882d2a23da3f109c4"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Nov 29 07:14:40 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 29 07:14:40 2018 +0000"
      },
      "message": "Merge \"Use ArtMethod::GetDexFile() instead of using declaring class.\""
    },
    {
      "commit": "7e09737125ddb8c6f243ac1882d2a23da3f109c4",
      "tree": "1105bc475dec6b923c205cde3d90ca32cd3a803b",
      "parents": [
        "201330ccfb11989f7449486865c6f74b54f1a914"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 28 16:40:59 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 28 16:43:06 2018 +0000"
      },
      "message": "Use ArtMethod::GetDexFile() instead of using declaring class.\n\nThis is a follow-up to\n    https://android-review.googlesource.com/834082 .\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nBug: 119830111\nChange-Id: I5bd55b0293ef176385a7e9d8b296be6b470cfcc4\n"
    },
    {
      "commit": "e36e7f2226e4e08b7a7094f78cb80bbe0e729c2b",
      "tree": "0787ae19a232728121a60791f3a18094529120f1",
      "parents": [
        "244470afafdb1c5aba17507ef793d316b9c4d038"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Nov 14 14:21:23 2018 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Nov 27 17:31:01 2018 +0000"
      },
      "message": "Store ImtIndex in ArtMethod.\n\nThis avoids recalculation and reduces pressure on the thread local cache.\n\nThis halves the time we spend hashing from 2% to 1% (maps on device).\n\nTest: ./art/test.py -b --host --64\nChange-Id: I2407bd9c222de4ddc6eea938908a1ac6d7abc35b\n"
    },
    {
      "commit": "2bb2fbd2879d0a6d9ebf7acff817079dde89b417",
      "tree": "d607aa6bfb2ea55fbfd875237b37c79f3cfed5f6",
      "parents": [
        "85865697ff9fabede3d64ff64cde72727c3fc4c1"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Tue Nov 13 18:24:26 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Nov 16 11:11:20 2018 +0000"
      },
      "message": "Create SdkVersion enum, migrate users to it\n\nCreates a new SdkVersion enum with integer codes of known\nAndroid SDK versions, together with helper functions for common\npredicates. Also converts target_sdk_version_ in Runtime to\nuint32_t and cleans up its uses.\n\nTest: m test-art\nChange-Id: Idc6e518c8675068bf952d0256686c88bb0eb833e\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": "70f5fd0770adbef645950895309a2a63c3bde7c0",
      "tree": "d9794484e83858cf7e33551eb8a108e07f46b18c",
      "parents": [
        "52ecb65ae9e1ad6fe7f58beecc88cdc08e08f0c4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Oct 24 19:58:37 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Oct 26 08:44:12 2018 -0700"
      },
      "message": "ART: Add class-alloc-inl.h\n\nIn an effort to reduce the (transitive) proliferation of heap-inl\nadd a specific inline header for class instance allocation.\n\nBug: 118385392\nTest: mmma art\nTest: m test-art-host\nChange-Id: I32529f0221a836452c58687330a91ac0d5fde162\n"
    },
    {
      "commit": "8e0f04319c7c3ddee60c505376b31768533b0dd5",
      "tree": "b9d215de61b3a16895695e52ff4ee5ecbd985f14",
      "parents": [
        "88dbad33ae92167a89a5d5469f39f41624535dbf"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Oct 24 13:38:03 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Oct 25 09:52:37 2018 -0700"
      },
      "message": "ART: Add array-alloc-inl.h\n\nIn an effort to reduce the (transitive) proliferation of heap-inl\nadd a specific inline header for array allocation.\n\nBug: 118385392\nTest: mmma art\nTest: m test-art-host\nChange-Id: Id3378f40c52fa7ef4297af08cb7509e0c04b94d1\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": "6c2b86ea5347883564cf4450adbe79922bd8b458",
      "tree": "f39d824d8cf0744303356874cf7d8e28e9a801ae",
      "parents": [
        "e7019db7f0dce1bbad836396710c792fd39593fc"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Oct 15 12:57:20 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Oct 15 22:40:56 2018 +0100"
      },
      "message": "Cache the ImtTable index in the interpreter.\n\nThe index is fairly expensive to calculate; cache it.\n\nThis makes the interpreter 1% faster on average (golem; arm64),\nwith some benchmarks being up to 15% faster.\n\nTest: test.py -b --interpreter --host\nChange-Id: If77340967148254c47974538c3ebf051a055d4b0\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": "9293b530ac2a387d85063bffe1797b97c330e475",
      "tree": "32137e54e4f07fccfda3a5a999b1b646421d59c7",
      "parents": [
        "89dc5e2fcff4aee90c60e1a23cded5fa2d9a1f4c",
        "494b12c7c0d860a2aada21bdce7542d18255415c"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Thu Oct 04 13:22:15 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 04 13:22:15 2018 +0000"
      },
      "message": "Merge \"Only warn if a pre-P app overrides inlined methods at runtime\""
    },
    {
      "commit": "c853eed83eb9670ba671b6f271f612e958f64d34",
      "tree": "7f1c0b8bd8328194ead74002f5883e54295f44cd",
      "parents": [
        "ededf08e2f4a5df3401a5d4badb98ff3c8cb8fb9"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Sep 13 14:33:22 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Oct 03 14:26:06 2018 +0100"
      },
      "message": "Use the small thread-local cache for mterp invokes.\n\nThis speeds up non-quickened interpreter by 2% (measured on golem).\n\nTest: ./art/test.py -b -r --interpreter --host\nChange-Id: I6b00db1b2da7fda4cb0a34beb62d3857ae3d72df\n"
    },
    {
      "commit": "494b12c7c0d860a2aada21bdce7542d18255415c",
      "tree": "fa5cd8978c6ceedfe6636181ee41678fe649c92d",
      "parents": [
        "8a19432ee24e87c7962439beffd8a5f481ba4d28"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Sep 07 15:03:57 2018 +0100"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Fri Sep 07 17:02:08 2018 +0100"
      },
      "message": "Only warn if a pre-P app overrides inlined methods at runtime\n\nCL Ibe9792f952d0c963b8560f10d57a951e227b24aa increased strictness of\na check that an inlined method did not cross a dex file boundary. For\napp compat reasons, turn this into a warning if the app targets SDK\nversion \u003c 28 (P). The warning makes it clear that the runtime is in an\nunsafe state, but this was the case before P too. Developers will have\ntime to fix the issue until they start targetting P.\n\nBug: 74410240\nBug: 110985613\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing --jit\nChange-Id: Id1e159449a3766335de0913b94cdb240c1484a33\n"
    },
    {
      "commit": "ce32c1045ef2765fd02cb579245eee8b21476688",
      "tree": "dd2b807355a8778b14f1337209b7980e8da6be9a",
      "parents": [
        "c677cc2911258e077a65abddbbc82c47a68c4172"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Aug 31 07:21:07 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Sep 05 10:28:49 2018 +0100"
      },
      "message": "Rewrite mterp field access helpers\n\nSimplify the code to make further optimizations easier.\n\nTest: ./art/test.py -b -g\nTest: ./art/test.py -b -r --interpreter\nChange-Id: I54fc29a27a982bc007b600e044660ef04b6d9f29\n"
    },
    {
      "commit": "bbc6e7edb5fca4a61ac53dd9bce79cb4f0bb3403",
      "tree": "0fbce767bc383358cf4cd65aafc74140e1850982",
      "parents": [
        "19379b58bd433da91230e4fe6cd96e7416d16adc"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 24 16:58:47 2018 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Aug 28 11:06:07 2018 +0100"
      },
      "message": "Use \u0027final\u0027 and \u0027override\u0027 specifiers directly in ART.\n\nRemove all uses of macros \u0027FINAL\u0027 and \u0027OVERRIDE\u0027 and replace them with\n\u0027final\u0027 and \u0027override\u0027 specifiers. Remove all definitions of these\nmacros as well, which were located in these files:\n- libartbase/base/macros.h\n- test/913-heaps/heaps.cc\n- test/ti-agent/ti_macros.h\n\nART is now using C++14; the \u0027final\u0027 and \u0027override\u0027 specifiers have\nbeen introduced in C++11.\n\nTest: mmma art\nChange-Id: I256c7758155a71a2940ef2574925a44076feeebf\n"
    },
    {
      "commit": "9d479254d0dc4043a15ab26205f40439eca15493",
      "tree": "af8a9c9c6f2c28e723a971c9d39c9d1cebd1f814",
      "parents": [
        "ca20fb6cc4dda392e63bdc8ec9de54d89793373e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 24 11:35:20 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Aug 03 11:43:30 2018 +0000"
      },
      "message": "Rename type resolution entrypoints.\n\nRename the InitializeType and InitializeTypeAndVerifyAccess\nentrypoints to Resolve* to better match their semantics.\nKeep the InitializeStaticStorage name for now as the most\nappropriate name InitializeType would clash with the old\nname of the ResolveType entrypoint.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: Ide55b58c490d085ab37d8536f90699f7ed571d59\n"
    },
    {
      "commit": "a9f303c089aa2b2fc82d97201352945678ef54ae",
      "tree": "0df0eb5294a3ee72aea8ca670762c02ca9ffa8dd",
      "parents": [
        "1bfd891d06e276d602b4a6ccf1a9f70967195218"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jul 20 16:43:56 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Aug 02 17:41:21 2018 +0100"
      },
      "message": "Rewrite Class init entrypoint to take a Class arg.\n\nFixes invalid type index being passed to the entrypoint for\nclass init check across dex files when the target type does\nnot have a TypeId in the compilation unit\u0027s DexFile.\n\nThe size of the aosp_taimen-userdebug prebuilts:\n  - before:\n    arm/boot*.oat: 16782748\n    arm64/boot*.oat: 19764400\n    oat/arm64/services.odex: 20162432\n  - after:\n    arm/boot*.oat: 16811692 (+28.3KiB, +0.17%)\n    arm64/boot*.oat: 19801032 (+35.8KiB, +0.19%)\n    oat/arm64/services.odex: 20232208 (+68.1KiB, +0.35%)\nThis increase comes from doing two runtime calls instead of\none for HLoadClass/kBssEntry that MustGenerateClinitCheck().\n\nTest: Additional test in 476-clinit-inline-static-invoke\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing --jit\nTest: testrunner.py --jvm\nBug: 111433619\nChange-Id: I2fccd6944480ab4dac514f60d38e72c1014ae7b2\n"
    },
    {
      "commit": "8cd54547cec8a4537db5682c2da8be22843b1310",
      "tree": "fb1158993bab2e027984cedab59b402c051a45a7",
      "parents": [
        "91f0fdb4372d3f2bcfcd9db67afcbe7ee1901048"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sun Jul 15 23:58:44 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Aug 01 14:49:40 2018 +0100"
      },
      "message": "Move MethodInfo to CodeInfo.\n\nThere is no need to treat it specially any more,\nbecause of the de-duplication at BitTable level.\n\nThis saves 0.6% of oat file size.\n\nTest: test-art-host-gtest\nChange-Id: Ife7927d736243879a41d6f325d49ebf6930a63f6\n"
    },
    {
      "commit": "6ee06e97cef5ee92944deaeba0da4d10c4c33a2a",
      "tree": "77d69c85d37864b4d3ee970be4b7fd1246adee7b",
      "parents": [
        "f5dcd31d89282b6c9324fdc960e6e7e2281c16f1"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Jul 25 21:45:54 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Jul 26 11:45:54 2018 +0100"
      },
      "message": "Decode only the needed tables from CodeInfo.\n\nMost use cases need only the first two bit tables from CodeInfo.\nAdd flag to the decode method so that only those two are loaded.\nWe only touched the table header but that still made difference.\n\nThis speeds up pmd by over 10%.\n\nTest: test-art-host-gtest\nChange-Id: I7740081bf18205dd69864503b5bcec7de5e1a901\n"
    },
    {
      "commit": "d93e374e273dd45f5d829399da1d4201bf46057e",
      "tree": "280dc72b2aec4696bbc35ad39ca8d3479107380e",
      "parents": [
        "7f7f9d3991f3a55da8934a3b72890d4776373598"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 18 10:58:13 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 19 16:04:38 2018 +0100"
      },
      "message": "ObjPtr\u003c\u003e-ify ArtMethod and mirror::Method.\n\nAnd clean up some forgotten things after old CLs.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: I8af0e845c24d674d0efab21d80c29949b1cc0593\n"
    },
    {
      "commit": "2c76257e4bfcd6f522b0cd3487ba7d9900043243",
      "tree": "ab1098cffcb3e13087e770d26fef9f4d6f06a550",
      "parents": [
        "0b4a439f808f4602c7b97364e49c5546f5100d51"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Jun 27 10:09:11 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Jul 13 16:32:11 2018 +0100"
      },
      "message": "Remove unused InvokeInfo from stack maps and the runtime.\n\nTest: test-art-host-gtest\nChange-Id: I5ce28973042f9241e72ceb52fc5db472ca571563\n"
    },
    {
      "commit": "d109e30eab8ba25f8d89be2a83d9036e2d541af2",
      "tree": "24df91603efe9ce8c4a2efd09ac402aceb10df4e",
      "parents": [
        "c916736ca1e375c276df251446baf2ac8ff3eb13"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jun 27 10:25:41 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jul 10 08:44:51 2018 -0700"
      },
      "message": "Don\u0027t use StringFactory.newEmptyString in compiled code\n\nWhen compiling debuggable code we would compile a new-instance String\ninstruction into a StringFactory.newEmptyString invoke. This\nadditional invoke could be observed using tracing and is inconsistent\nwith the interpreter, where the string is simply allocated directly.\nIn order to bring these two modes into alignment we added a new\nAllocStringObject quick entrypoint that will be used instead of the\nnormal AllocObject\u003c...\u003e entrypoints when allocating a string. This\nentrypoint directly allocates a new string in the same manner the\ninterpreter does.\n\nNeeds next CL for test to work.\n\nBug: 110884646\nTest: ./test/testrunner/testrunner.py --host --runtime-option\u003d-Xjitthreshold:0 --jit\nTest: Manual inspection of compiled code.\nChange-Id: I7b4b084bcf7dd9a23485c0e3cd2cd04a04b43d3d\n"
    },
    {
      "commit": "c916736ca1e375c276df251446baf2ac8ff3eb13",
      "tree": "64f5243c1b95e63a24861af5508b3f71311b51c0",
      "parents": [
        "2c8206ffeb07cebe2f612b8c66c0f4f4132e2be2"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Jun 11 16:46:43 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jul 10 08:44:17 2018 -0700"
      },
      "message": "Ensure proxy methods are reported by instrumentation\n\nPreviously we would not report proxy methods to instrumentation in all\ncases. Specifically if the instrumentation trampolines were not\ninstalled we would never report proxy method entry or exit. This fixes\nthat and ensures that proxy methods are always reported to\ninstrumentation regardless of what instrumentation method is being\nused. It also ensures that these methods will only ever be reported\nonce per entry.\n\nTest: ./test.py --host\nTest: ./test/testrunner/testrunner.py \\\n         --host \\\n         --run-test-option\u003d\u0027--with-agent libtifast.so\u003dMethodEntry,MethodExit\u0027\n\nChange-Id: I78f1d4b3b3f242e8915989ab26f7c204baab08e5\n"
    },
    {
      "commit": "2d441b1253cca39bf3078422e8f0b2f4ec1bb408",
      "tree": "3db740023b1322749856f943c4b25b8158da8a44",
      "parents": [
        "e824cfdcfd41d400237a806ff93caca7f2e51878"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jun 08 15:33:21 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jul 10 08:44:17 2018 -0700"
      },
      "message": "Make instrumentation trampoline able to jump to jit code\n\nIn order to get the benefit of the instrumentation trampoline it must\nbe able to jump to jit code. This patch adds support for doing that\nand adds code to ensure that we will not be jumping back and forth\nbetween the trampoline and the interpreter all the time if the jit has\nnot yet compiled the current method.\n\nNote we also disable the jit-gc when turning on these trampolines\nsince otherwise we could end up either sending instrumentation events\nmultiple times or running uninitialized memory.\n\nBug: 110263880\nTest: ./test/testrunner/testrunner.py --host --runtime-option\u003d-Xplugin:libtracefast-trampolined.so\nTest: ./test/testrunner/testrunner.py --host --runtime-option\u003d-Xplugin:libtracefast-trampolined.so --runtime-option\u003d-Xjitthreshhold:0\nTest: ./test.py --host\n\nChange-Id: Ie6e92ec6367452fe4fde24d520d808b7af91d1b5\n"
    },
    {
      "commit": "a296f908e186398ff413c78f2460cb3138e531ab",
      "tree": "04592d0bcf8afac399dc562efdcac491072366eb",
      "parents": [
        "b275072ddfb1bfcacc914aff08cb0f5774000258",
        "93bd3619de4616040d672a4ed3825976bed4bfce"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Jul 05 00:03:21 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jul 05 00:03:21 2018 +0000"
      },
      "message": "Merge \"Use iterators to access stack map data.\""
    },
    {
      "commit": "93bd3619de4616040d672a4ed3825976bed4bfce",
      "tree": "2ab3424374ed3d316053ed8e9ec2d4b95ea2ef4d",
      "parents": [
        "f07d5617770c37d87447c8bddf105eb0469ab093"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Jul 02 19:30:18 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Jul 04 14:23:12 2018 +0100"
      },
      "message": "Use iterators to access stack map data.\n\nTry to simplify the code using the recently added iterators.\n\nTest: test-art-host-gtest-stack_map_test\nChange-Id: I0b9f54df01749ee6ec3a67cfb07ba636a2489c89\n"
    },
    {
      "commit": "35d5b8a2c5d2fce03be59aa003c3bf3c1b481be0",
      "tree": "7665f6d1527be61af13c8ef53f10833dd4200cfd",
      "parents": [
        "b28683f43231e65860ecf91c96a8c0234542c019"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 03 09:18:32 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 03 09:18:32 2018 +0100"
      },
      "message": "ART: Do not use std::\u003ccontainer\u003e::at().\n\nThese functions are specified as throwing std::out_of_range\nand we do not use exceptions.\n\nTest: m\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I67c365ed6d779c101a18b9f386c751c48ca76e16\n"
    },
    {
      "commit": "88ea61ef73d4c670ae6188f60e1d07bb8befc895",
      "tree": "4be800ea6e2e6ea7b985649c62a3a88841eb1720",
      "parents": [
        "15bdbf1e189d998cb0f63772a456190cf85bc777"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jun 20 17:45:41 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jun 20 17:48:08 2018 -0700"
      },
      "message": "Refactor WriteBarrier logic into its own file\n\nRefactor write barrier logic to have the null check logic in the\nbarrier if possible.\n\nMoved the logic into its own file.\n\nTest: test-art-host\n\nChange-Id: I8292cd7f01dbdddea7aeab6e01da4d309ab452fe\n"
    },
    {
      "commit": "c97946ca7e99eeb53388d3d4d4577705f5537671",
      "tree": "f24e0ab43c61546f23e4c3f06723b7ed34cec904",
      "parents": [
        "6cae5ea222ba256b0ade1e18e37a0f49e952c57c"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jun 08 09:22:55 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jun 13 10:32:17 2018 -0700"
      },
      "message": "Allow jumping back to interpreter in instrumentation entrypoint.\n\nWe were incorrectly asserting that all non-deoptimized methods had\nvalid (and findable) compiled code available. With the JIT this is no\nlonger true.\n\nNB Several additional patches are required for the instrumentation\ntrampolines to actually work correctly in all instances.\n\nTest: ./test.py --host\nTest: ./test/testrunner/testrunner.py --host --runtime-option\u003d-Xplugin:libtracefast-trampolined.so\nChange-Id: I069957a63dc36abaadd24063099c0d9e279f1884\n"
    },
    {
      "commit": "6cae5ea222ba256b0ade1e18e37a0f49e952c57c",
      "tree": "454921ebef5312cb81fa3e8e011c0d4d4eae9ad6",
      "parents": [
        "b32c6a914e7e7658c5ea64a00f2776e351adaa74"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jun 07 17:07:02 2018 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jun 13 10:32:10 2018 -0700"
      },
      "message": "Ensure we never instrument Proxy.\u003cinit\u003e entrypoint\n\nDue to the way we implement Proxy classes we need to be very careful\nwhen modifying proxy classes and the (non-proxy)\njava.lang.reflect.Proxy class and its methods. In particular we always\navoid installing an instrumentation entrypoint into the Proxy.\u003cinit\u003e\nmethod since we copy it for each proxy class. Failing to do this\ncauses problems as the instrumentation entrypoint bounces to the Proxy\nentrypoint which gets confused since the copied init method is not\nreally a proxy method. Unfortunately if one starts the profiling\nprocess early enough it was possible for the Proxy.\u003cinit\u003e method to\nget instrumented as it is being loaded. This CL ensures that the\nmethod is skipped just like it would be if profiling was started\nlater.\n\nNB Test requires several other patches to actually run far enough to\nobserve this issue.\n\nTest: ./test/testrunner/testrunner.py --host --runtime-option\u003d-Xplugin:libtracefast-trampolined.so\nTest: ./test/testrunner/testrunner.py --host --run-test-option\u003d\u0027--with-agent libtifast.so\u003dMethodEntry,MethodExit\u0027\nChange-Id: I18fb381d18d7100b5ec843b3cddd387f2d033776\n"
    },
    {
      "commit": "4c8e12e66968929b36fac6a2237ca4b04160161e",
      "tree": "d8bbfd72a978c69ef2eef98c37e7869673c52295",
      "parents": [
        "20c64f8d802cc575cc9a1a1f6c493a611b23e2ee"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri May 18 08:33:20 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Mon Jun 11 10:57:17 2018 +0100"
      },
      "message": "ART: Adds an entrypoint for invoke-custom\n\nAdd support for the compiler to call into the runtime for\ninvoke-custom bytecodes.\n\nBug: 35337872\nTest: art/test.py --host -r -t 952\nTest: art/test.py --target --64 -r -t 952\nTest: art/test.py --target --32 -r -t 952\nChange-Id: I821432e7e5248c91b8e1d36c3112974c34171803\n"
    },
    {
      "commit": "cd260ebf53e0e05bd75c37c4139f32782eb4ad97",
      "tree": "dab8e9054c59c16303ab9c8aeed01edeb0bb12da",
      "parents": [
        "408bdc604e4fe230bf90ffa6816bfbbb3786806e"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jun 06 09:04:17 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jun 08 14:56:10 2018 +0100"
      },
      "message": "ART: Simplify invoke-polymorphic entrypoints\n\nMoves to pattern used by the interpreter bridge and writes the result\nin both the regular return register and the floating point result\nregister.\n\nAdd return value tests to 956-method-handles.\n\nTest: art/test.py --host -r -t 956\nTest: art/test.py --target --32 -r -t 956\nTest: art/test.py --target --64 -r -t 956\nChange-Id: I7389d04b70b88e149682f6d656ab185e48bcbf66\n"
    },
    {
      "commit": "f51359edab8cd1a77677e68f0f2b56dc0f5d2561",
      "tree": "8b03fb414afac9cac2746eaaac9cd3330f1c097b",
      "parents": [
        "a13ec547911bb33d05955d9d6f336f550c8d9c10",
        "6e69e52a12883386f91d014324bebee867ca7877"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 06 00:24:22 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jun 06 00:24:22 2018 +0000"
      },
      "message": "Merge \"Remove depth argument from InlineInfo accessors in stack maps.\""
    },
    {
      "commit": "6e69e52a12883386f91d014324bebee867ca7877",
      "tree": "7d1850f0a59e4ea2d013d6d479cd616b66922970",
      "parents": [
        "6eb4d5e4bc2ce068004c1d7c85dbfff0c5efd11d"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Sun Jun 03 12:00:14 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Jun 05 16:50:38 2018 +0100"
      },
      "message": "Remove depth argument from InlineInfo accessors in stack maps.\n\nThe InlineInfo class actually represented a list of inlining\ninformation for a given stack map, and the depth argument was\nused everywhere to select to desired element from the list.\nThis was verbose and inconsistent with the other classes.\n\nChange the InlineInfo class to represent a single inlining,\nand select the desired depth when getting it from CodeInfo.\n\nTest: test-art-host-gtest-stack_map_test\nChange-Id: I35b73e6704854f0203f51d4dbdbed5b1d1cd5a3b\n"
    },
    {
      "commit": "18090d118bfb04620aeef719e2d7780c26298bf8",
      "tree": "040e5195f0278c9bc846d5543c0e36771ffc5b48",
      "parents": [
        "9ddef18ae95859a985e7a0de7e22999fcbc28e07"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 01 16:53:12 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 04 17:52:35 2018 +0100"
      },
      "message": "Refactor String resolution.\n\nUse the same pattern as type resolution and avoid some\nunnecessary read barriers in the fast path. Consolidate\nnaming between ArtField and ArtMethod.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nChange-Id: Iea69129085f61f04a4add09edd0eadbb7ac9ecb2\n"
    },
    {
      "commit": "bcf175247272d0e321c8d988c3c01c123b56e36e",
      "tree": "9f65ece5ce9474aa4fcf16fbfca6278109dc9a67",
      "parents": [
        "09c5ca40635faee00f40f6ca0581dd475efd545e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 01 13:14:32 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 01 16:31:30 2018 +0100"
      },
      "message": "ObjPtr\u003c\u003e-ify array allocations.\n\nAnd remove some unnecessary calls to ObjPtr\u003c\u003e::Ptr().\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: Ie313980f7f23b33b0ccea4fa8d5131d643c59080\n"
    },
    {
      "commit": "5924a4a73f1a2dcf83877062d67c297a9496b326",
      "tree": "3517a1809ecbdc85533e1a8c5a0a9610cdc36005",
      "parents": [
        "2cffc5d2807096c0b7a07b89f5dda6920c6429f5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 29 17:40:41 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 30 12:50:37 2018 +0100"
      },
      "message": "Move String::SizeOf\u003c\u003e to string.h .\n\nstring.h was already indirectly (through class.h) including\neverything needed for String::SizeOf\u003c\u003e, so move it to the\nstring.h and make those includes direct. Then we can change\nthe object-inl.h to include only string.h, reducing the\nnumber of indirectly included files.\n\nTest: m test-art-host-gtest\nTest: m testrunner.py --host --optimizing\nChange-Id: I51c462c034f205498c539abe6d888be9738d4a6e\n"
    },
    {
      "commit": "c7aa87e1666ac48ddf9149cfdfd64b026b3969e5",
      "tree": "32d5d74718cc558e13642873e55724782ac9df22",
      "parents": [
        "0278be74269fcfe4f2517d449f2bd53472f9b2f9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 24 15:19:52 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 25 11:37:45 2018 +0100"
      },
      "message": "Remove static_class_ from Method/VarHandle and CallSite.\n\nAnd add MethodHandle to the class roots to avoid extra\nindirection through MethodHandleImpl.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: Iaf172f3732677f2b4509e8297e6e9af5fb81a89f\n"
    },
    {
      "commit": "b4eb1b19e1dd35d12a408358656c1421f507d231",
      "tree": "03ba65d206b5e6222dcca0f62a973bcbb1bf8a50",
      "parents": [
        "ff7ff426e136aa8fd6e33d873f6259311982f6bb"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 24 11:09:38 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 25 11:32:31 2018 +0100"
      },
      "message": "Refactor ClassRoot/GetClassRoot().\n\nMove it outside the ClassLinker, into its own header file,\nand add retrieval based on a mirror class template argument.\nKeep the SetClassRoot() as a private member of ClassLinker.\n\nMake the new GetClassRoot()s return ObjPtr\u003c\u003e.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: Icbc6b62b41f6ffd65b437297a21eadbb0454e2b7\n"
    },
    {
      "commit": "aaebb1468cc95838aa58ed537d03de000c9cfe28",
      "tree": "80f325dab976dccd846e3bd5d1b86266be24e3dc",
      "parents": [
        "79866c1f089672eca1fb7776c669c2cef3d6ad3e",
        "6ec2a1bf1cbecf17546df780dd0ad769042e1874"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 23 14:58:19 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed May 23 14:58:19 2018 +0000"
      },
      "message": "Merge \"ObjPtr\u003c\u003e-ify UnstartedRuntime, fix 2 stale reference uses.\""
    },
    {
      "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": "d352156dfeadc72fda186ef8dcbeea4d06eee509",
      "tree": "64ff7c025cacac290e21beea27ef6533e4f04d79",
      "parents": [
        "cbe50e965be5bcc7e9e0bba8b52a9b1adb7c291f",
        "d3083dd15af1cb4ffc13d87a7d2c3be2edb9199d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 22 15:33:35 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 22 15:33:35 2018 +0000"
      },
      "message": "Merge \"Refactor runtime callee save frame info.\""
    },
    {
      "commit": "d3083dd15af1cb4ffc13d87a7d2c3be2edb9199d",
      "tree": "88dd2599ad89da5a4f2668a2c9debd0335669cd0",
      "parents": [
        "6623bc389c43efc87668ce7465e19b195e765e22"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 17 08:43:47 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 22 14:38:14 2018 +0100"
      },
      "message": "Refactor runtime callee save frame info.\n\nAnd avoid storing the info in Runtime.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing --jit\nChange-Id: Ib14853fc06c420753993e1f9e82a1b01f5e35e8c\n"
    },
    {
      "commit": "052f8ca1776ed7deb4f036498edd69eb6a1b942f",
      "tree": "ae993f1a634b258e124df12663a1d24859917b05",
      "parents": [
        "1c515f0b9d621869a2e67ce5e0f5532d0f2f323a"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Apr 26 15:42:54 2018 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon May 21 20:28:41 2018 +0100"
      },
      "message": "Rewrite stackmap encoding code.\n\nRemove most of the code related to handling of bit encodings.\nThe design is still same; the encodings are just more implicit.\nMost of the complexity is replaced with a single BitTable class,\nwhich is a generic purpose table of tightly bit-packed integers.\nIt has its own header which stores the bit-encoding of columns,\nand that removes the need to handle the encodings explicitly.\n\nOther classes, like StackMap, are accessors into the BitTable,\nwith named getter methods for the individual columns.\n\nThis CL saves ~1% of .oat file size (~4% of stackmap size).\n\nTest: test-art-host-gtest\nChange-Id: I7e92683753b0cc376300e3b23d892feac3670890\n"
    },
    {
      "commit": "537a4fed85530ac29fe5ff173c4b77538d8bbd0b",
      "tree": "dc7a7e699145082827e17034a66260a10d1b9609",
      "parents": [
        "00e15d651e705640d4fdf206faf8317d69b20758"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue May 15 13:57:58 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue May 15 16:35:59 2018 +0100"
      },
      "message": "ART: Add VarHandle accessors to invoke-polymorphic entrypoint\n\nRemoves the need to interpret methods containing VarHandle accessor\nmethods. Whilst there are VarHandle accessors that the compiler does\nnot support, this will be the fallback path.\n\nBug: 71781600\nTest: art/test.py --host -r -t 712\nChange-Id: I40314b773882faed554c31b7f34c0e319dcf8d45\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": "dbaa5c7ba8935cf87ceb40a4054f9842929e9a51",
      "tree": "5037625c80cb97a0e13026dc450db28e59ff72ca",
      "parents": [
        "51dda39549033b3c50a7fce5522ffc81325db54b"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu May 10 08:22:46 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri May 11 11:55:30 2018 +0100"
      },
      "message": "ART: Compiler support for const-method-handle\n\nImplemented as a runtime call.\n\nBug: 66890674\nTest: art/test.py --target -r -t 979\nTest: art/test.py --target --64 -r -t 979\nTest: art/test.py --host -r -t 979\nChange-Id: I67f461c819a7d528d7455afda8b4a59e9aed381c\n"
    },
    {
      "commit": "18259d7fb7164a5e029df4f883b3a79ccc2403e8",
      "tree": "ba378bfdef4127bb0607215186e3b150fd38bcdf",
      "parents": [
        "922501b4bbf724e4259477a27764291684eedffb"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Apr 12 11:18:23 2018 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu May 10 15:04:09 2018 +0100"
      },
      "message": "ART: Compiler support for const-method-type\n\nImplemented as a runtime call.\n\nBug: 66890674\nTest: art/test.py --target -r -t 979\nTest: art/test.py --target --64 -r -t 979\nTest: art/test.py --host -r -t 979\nChange-Id: I4b3d3969d455d0198cfe122eea8abd54e0ea20ee\n"
    },
    {
      "commit": "a3ad0cdd711857f04f477e2cdc5b56a2c74a3018",
      "tree": "7e0e4c7888c2497d86ce96c9574d7c9886721ccf",
      "parents": [
        "abd9e1515bc6be88372c61071971c5432a51553d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 04 10:06:38 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 09 11:11:09 2018 +0100"
      },
      "message": "ART: Move JNI files to runtime/jni/ .\n\nTest: Rely on TreeHugger.\nChange-Id: I9cae11191ef1567ae9453be498882a7767285140\n"
    },
    {
      "commit": "63a9f3e9e1b9fb8d98d8ca9abe626f3aa11e5692",
      "tree": "178ff5f9e9bc9bd9b9a65689af422fed58fbed13",
      "parents": [
        "95bc9b25ee14aa2fac893fb3a3870d739698c421"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 26 09:18:10 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 26 09:32:18 2018 +0100"
      },
      "message": "AOT inlined method lookup should stay within dex file.\n\nRewrite the AOT inlined method lookup and guard against\ncrossing dex file boundary. The compiler does not currently\nsupport inlining across dex files, so this is an indication\nof multiple dex files defining the same class and the AOT\ncode having used a definition which is not used at runtime.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing --jit\nBug: 74410240\nChange-Id: Ic2a595ee798e7973156bf29d1a1bcc8615405407\n"
    },
    {
      "commit": "606adb3a515b31e6d4b02becb36f732918fe7713",
      "tree": "eea60acb136237fdff195ab264b5513dae3b0ce7",
      "parents": [
        "30a2d9c61da75359dee4ce90236d19fc6341b07a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 05 14:49:24 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 05 16:34:11 2018 +0100"
      },
      "message": "Fix and extend debugging output for bug 74410240.\n\nTest: Manually break in the resolution trampoline and\n      force printing the message.\nBug: 74410240\n\nChange-Id: I5f3fea53a7ec2170b644fb13bca84bae099243c8\n"
    },
    {
      "commit": "175e7862dbdb44089ef327fc43ba00c791fd3838",
      "tree": "7b7ff4327b51b57e47e4b22af8d771edb9d462c1",
      "parents": [
        "77c6fc7341143dd27c74cddd786398688d7b4c91"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 27 09:03:13 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 27 10:04:25 2018 +0100"
      },
      "message": "Revert^4 \"Compiler changes for bitstring based type checks.\"\n\nDisabled the build time flag. (No image version bump needed.)\n\nBug: 26687569\nBug: 64692057\nBug: 76420366\n\nThis reverts commit 3fbd3ad99fad077e5c760e7238bcd55b07d4c06e.\n\nChange-Id: I5d83c4ce8a7331c435d5155ac6e0ce1c77d60004\n"
    },
    {
      "commit": "d1ede32d56d2b6c95f94a8c67d8b9f309940d9de",
      "tree": "1aa42a51731533c9d554a913e655b8091fc6829d",
      "parents": [
        "41a10575b319ca9549d7b3e8a9fe91c1cc602659",
        "3fbd3ad99fad077e5c760e7238bcd55b07d4c06e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 26 21:16:37 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 26 21:16:37 2018 +0000"
      },
      "message": "Merge \"Revert^3 \"Compiler changes for bitstring based type checks.\"\""
    },
    {
      "commit": "3fbd3ad99fad077e5c760e7238bcd55b07d4c06e",
      "tree": "e8bc33fa60c38f7e1c85f8d4acf6a738df9b426a",
      "parents": [
        "3f41323cc9da335e9aa4f3fbad90a86caa82ee4d"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 26 21:14:46 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 26 21:14:46 2018 +0000"
      },
      "message": "Revert^3 \"Compiler changes for bitstring based type checks.\"\n\nThis reverts commit 3f41323cc9da335e9aa4f3fbad90a86caa82ee4d.\n\nReason for revert: Fails sporadically.\n\nBug: 26687569\nBug: 64692057\nBug: 76420366\nChange-Id: I84d1e9e46c58aeecf17591ff71fbac6a1e583909\n"
    },
    {
      "commit": "7075583146f52a754c6d7c91757a6333bf1b95da",
      "tree": "6e3c7a78d19c1b4f9d952d8143939c9caa5fa5b6",
      "parents": [
        "90637419635837d3a30634eb827bd8aa052adcc7",
        "3f41323cc9da335e9aa4f3fbad90a86caa82ee4d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 26 10:24:30 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 26 10:24:30 2018 +0000"
      },
      "message": "Merge \"Revert^2 \"Compiler changes for bitstring based type checks.\"\""
    },
    {
      "commit": "aa960867f4c1b5088e778c99fbfaaec7e40f8ada",
      "tree": "2ef1c7b692c6e0616b0b51058eb1476744551166",
      "parents": [
        "9ec1e24ebc683b15bb9c6db5554ac2ff9458adae",
        "f8655b3411967f7cacd033f41d3c430016751c7d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 22 12:35:34 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 22 12:35:34 2018 +0000"
      },
      "message": "Merge changes I4ca880f6,I6ebe18fe\n\n* changes:\n  Fix test failures with -Xjitthreshold:0.\n  Pass --runtime-option from testrunner to run-test.\n"
    },
    {
      "commit": "3f41323cc9da335e9aa4f3fbad90a86caa82ee4d",
      "tree": "ce41c620d2cd411da3c20aa95fb9a69328e77c42",
      "parents": [
        "9ec1e24ebc683b15bb9c6db5554ac2ff9458adae"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 12 18:39:15 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 22 12:12:39 2018 +0000"
      },
      "message": "Revert^2 \"Compiler changes for bitstring based type checks.\"\n\nAdd extra output for debugging failures and re-enable\nthe bitstring type checks.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: testrunner.py --host -t 670-bitstring-type-check\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing --jit\nTest: testrunner.py --target -t 670-bitstring-type-check\nBug: 64692057\nBug: 26687569\n\nThis reverts commit bff7a52e2c6c9e988c3ed1f12a2da0fa5fd37cfb.\n\nChange-Id: I090e241983f3ac6ed8394d842e17716087d169ac\n"
    },
    {
      "commit": "f8655b3411967f7cacd033f41d3c430016751c7d",
      "tree": "cf40c395294fc174fc44118b7c88a6aa531b367e",
      "parents": [
        "41b1f0ef0cf1ba3035dec395cc18b9ffe80ebe5d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 21 17:53:56 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 22 10:00:18 2018 +0000"
      },
      "message": "Fix test failures with -Xjitthreshold:0.\n\nNamely\n  - 667-jit-jni-stub:\n    fix GenericJNI to respect -Xjitthreshold:0,\n  - 1935-get-set-current-frame-jit:\n    check for OSR, not for being interpreted.\nHowever, some failures remain when --gcstress is added.\n\nTest: testrunner.py --host --jit --runtime-option\u003d-Xjitthreshold:0\nTest: testrunner.py --host\nBug: 62611253\nChange-Id: I4ca880f6a8b64a1659a27a107fae9933d4174f8d\n"
    },
    {
      "commit": "312f3b2fd0094c028a7d243b116947a35a745806",
      "tree": "3d7ec049ded98c489098c87250c75e3f711f8290",
      "parents": [
        "0a3d5eb2ff9e70fa5785638da938439835d0337e"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Mar 19 08:39:26 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Mar 19 11:02:48 2018 -0700"
      },
      "message": "Move some remaining dex utilities\n\nThere were several utilities related to building/walking/testing dex\nfiles that were not in libdexfile.  This change consolidates these.\n\nBug: 22322814\nTest: make -j 50 test-art-host\nChange-Id: Id76e9179d03b8ec7d67f7e0f267121f54f0ec2e0\n"
    },
    {
      "commit": "5b4b9a0cbd932a7a1b739d4f852c9fa4617fef36",
      "tree": "2baacd88c9665cfe2616f11a83a0743f270e9c62",
      "parents": [
        "722093c305de5646759318fdeedc022c08a6723c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 16 09:42:09 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 16 10:54:46 2018 +0000"
      },
      "message": "Add extra logging for bug 74410240.\n\nTest: Manually break in the resolution trampoline and\n      force printing the message.\nBug: 74410240\nChange-Id: Id3480399fae30840d73ef105707fe1977f0f2a19\n"
    },
    {
      "commit": "fac21782ed87ce800813cfa0f9b4ee4bb4aac462",
      "tree": "f14147d03574751cc2c153cf925354c722111177",
      "parents": [
        "68f0680e83179cfe0127fda54a8e02a8552bf619"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 13 17:01:09 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 14 11:06:34 2018 +0000"
      },
      "message": "Fix delivering async exception while in compiled code.\n\nChange artInstrumentationMethodExitFromCode() to check\nfor async exceptions.\n\nAlso fix kDebugExceptionDelivery \u003d true causing stale\nObjPtr\u003c\u003e use.\n\nTest: run-test --jit -runtime-option -Xjitthreshold:0 \\\n      1934-jvmti-signal-thread\nTest: Repeat with kDebugExceptionDelivery \u003d true.\nBug: 74583459\nChange-Id: Ia2e777cc3ccef4eba549aa290f8bc12608eafe44\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": "a68aabb0f068d8962ca9329b5115f0c8bbf29440",
      "tree": "8994b712856d9850eeed04a7a55993d4a0afbce4",
      "parents": [
        "11088ad5d79fe9ac7875b625fcea01ddf42db3bf"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Feb 20 17:55:55 2018 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Feb 20 17:56:03 2018 +0000"
      },
      "message": "Don\u0027t fixup proxy method arguments after invoking the InvocationHandler.\n\nThis is no longer needed, as proxy method reference arguments are now\nvisited as GC roots.\n\nTest: art/test.py\nBug: 73149739\nChange-Id: Id19ebbb16b494c73d999ea36b242ee1762b60f8b\n"
    },
    {
      "commit": "11088ad5d79fe9ac7875b625fcea01ddf42db3bf",
      "tree": "fac57f2119c3fc6a97b5a7a7779946bc0062a406",
      "parents": [
        "87df7addc6194ec5f2e0e1b85c59d96bafd94efd",
        "ad0777d89df7eb21d7d2001f9743882d10de3f5c"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Feb 20 13:50:18 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 20 13:50:18 2018 +0000"
      },
      "message": "Merge \"Visit proxy methods reference arguments when visiting Quick frames roots.\""
    },
    {
      "commit": "ad0777d89df7eb21d7d2001f9743882d10de3f5c",
      "tree": "15bf8fbfd1a3534972195d4ada9d92f1d0c98903",
      "parents": [
        "db8d9091bbab41060584ab80882b60df20337da7"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Feb 12 20:00:18 2018 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Feb 15 18:51:24 2018 +0000"
      },
      "message": "Visit proxy methods reference arguments when visiting Quick frames roots.\n\nThe arguments of a proxy method, stored in the proxy method\u0027s stack\nframe, need to be visited as GC roots. This is especially important\nin the case of a moving GC, where these reference arguments may be\nmoved like any object. Previously, we would only visit the target\n(`this` argument) of proxy methods when visiting Quick frames roots.\n\nTest: art/test/testrunner/testrunner.py --gcstress -t 999-proxy-method-arguments\nTest: m test-art-host\nTest: m test-art-target\nBug: 73149739\nBug: 70216372\nBug: 67679263\nChange-Id: Ieacc966ab1038935600f2193c14e6ca01e88602e\n"
    },
    {
      "commit": "ea179f477465789605e0c8f57a3ec660c3d852e8",
      "tree": "bde254b238c9ed42a5c0ae3ff14ffacadeeddb34",
      "parents": [
        "d991e5119a2bb61542899da9708f794dc60677c4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 08 22:30:18 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 15 15:47:02 2018 +0000"
      },
      "message": "Refactor method resolution in class linker.\n\nRewrite all runtime callers of DexCache::SetResolvedMethod\nto call a shared method that will do the dex cache update.\n\nbug: 64759619\nTest: test-art-host\nTest: device boots, runs\n\nChange-Id: Icc1aca121030e2864de09667bdbc793b502e3802\n"
    },
    {
      "commit": "fa854e4834c383daafd240902ecb291ecfdad7b6",
      "tree": "ac3d740dc0c7c6e91b286f467c3b111b178822c5",
      "parents": [
        "bae3065e57e2e82aa29d6207312c5ba38cff7426"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Feb 07 13:09:55 2018 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Feb 07 14:27:57 2018 +0000"
      },
      "message": "Visit targets of proxy methods when visiting thread roots.\n\nThe target of a non-static proxy method (`this` object), stored in the\nproxy method\u0027s stack frame, needs to be visited as GC root. This is\nespecially important in the case of a moving GC, where the proxy\ninstance may be moved like any object.\n\nFix initially provided by Robert Vollmer.\n\nTest: m test-art-host\nTest: art/test/testrunner/testrunner.py --gcstress -t 1939-proxy-frames\nTest: art/test/testrunner/testrunner.py --gcstress -t 1914-get-local-instance\nBug: 70216372\nBug: 67679263\nChange-Id: Iea27a8eba51ccd9c9055efaf6b263892830170b5\n"
    },
    {
      "commit": "0225f8e2939a9340cb7dcebfcfe7996a2bd9bce9",
      "tree": "fd32362dff4ecdc8ff8b0d800a1b46fb0d9d0104",
      "parents": [
        "c7e546ff3963a1d51b1f100d308db735bd19f736"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Jan 31 08:52:24 2018 +0000"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Jan 31 01:24:53 2018 -0800"
      },
      "message": "Revert \"Revert \"Make libdexfile build independent of runtime dir\"\"\n\nThis reverts commit 787784f9effb126b5d0d3dc97d544c4a477b5daf.\n\nReason for revert: Bot configuration issue.\n\nChange-Id: I6a10bb4a9571f89c7e4dd095f9157e830a44e2de\nBug: 22322814\nTest: make -j 50 checkbuild\n"
    },
    {
      "commit": "787784f9effb126b5d0d3dc97d544c4a477b5daf",
      "tree": "1ff6d9fd284a4dd2a337165dff20e71137997c9d",
      "parents": [
        "b40b7e73469339a6b667b4a2e2b8690112a74dc9"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jan 30 18:48:51 2018 +0000"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jan 30 18:48:51 2018 +0000"
      },
      "message": "Revert \"Make libdexfile build independent of runtime dir\"\n\nThis reverts commit b40b7e73469339a6b667b4a2e2b8690112a74dc9.\n\nReason for revert: on device libdexfile.so missing\n\nChange-Id: I9bd61a98bef870400580e8c991cb061d3f57fa72\n"
    },
    {
      "commit": "b40b7e73469339a6b667b4a2e2b8690112a74dc9",
      "tree": "7e8a34d9c7894c4c946f674f19f0a0a512b95184",
      "parents": [
        "9690ad794b324ba54e936608881ac0f62538b97a"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Jan 25 17:11:07 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jan 30 01:17:58 2018 -0800"
      },
      "message": "Make libdexfile build independent of runtime dir\n\nRemove libdexfile\u0027s dependency on utils.cc and move utf.cc into\n/dex.  Remove libdexfile\u0027s constituent sources from libart and\nuse libdexfile wherever libart is. Also remove some ART-specific\ninterfaces.  Libdexfile\u0027s tests remain to be converted, plus\nmoving the files to a new directory peer to runtime/.\n\nBug: 22322814\nTest: make -j 50 test-art-host\nChange-Id: Ifaf695216e4a0e43d3aa377984d933f7a2a243c2\n"
    },
    {
      "commit": "bff7a52e2c6c9e988c3ed1f12a2da0fa5fd37cfb",
      "tree": "e281a8dde61e396ed5f20c31d41086b1b1b18389",
      "parents": [
        "83af48e9f4cdfcf3f0069c63561bab4c176bd2f1"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 25 13:33:07 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 25 15:05:16 2018 +0000"
      },
      "message": "Revert \"Compiler changes for bitstring based type checks.\"\n\nBug: 64692057\nBug: 71853552\nBug: 26687569\n\nThis reverts commit eb0ebed72432b3c6b8c7b38f8937d7ba736f4567.\n\nChange-Id: I7daeaa077960ba41b2ed42bc47f17501621be4be\n"
    },
    {
      "commit": "83047434e9068afc4114e763a6fbdabeb84ead9b",
      "tree": "7ea791b513fa0e7fce7d2edad1ba5aad54918a64",
      "parents": [
        "8dc11b7951ebb0c8cf3166c0835dcbcbafc01c2b",
        "0be8cabf16ee5fa5186bc90471911336f6c01f19"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jan 25 12:39:50 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jan 25 12:39:50 2018 +0000"
      },
      "message": "Merge \"Revert \"ART: Use the bitstring type check for AOT app compilation.\"\""
    },
    {
      "commit": "0be8cabf16ee5fa5186bc90471911336f6c01f19",
      "tree": "0ff068df6465b52458ecca3de96d119234415def",
      "parents": [
        "718e8319c728e9ee2ec15b1d56ca96baa4393028"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 25 10:47:41 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 25 10:47:41 2018 +0000"
      },
      "message": "Revert \"ART: Use the bitstring type check for AOT app compilation.\"\n\nTest failures:\nhttp://build.chromium.org/p/client.art/builders/fugu-debug/builds/4875\n\n01-25 02:05:28.357 23732 23732 F /data/local/tmp/system/bin/../bin/dalvikvm: quick_throw_entrypoints.cc:132] Check failed: !dest_type-\u003eIsAssignableFrom(src_type) \n\n\nThis reverts commit 718e8319c728e9ee2ec15b1d56ca96baa4393028.\n\nChange-Id: I022f88cd81ae99143e5670ae29eae326ecc83cc2\n"
    },
    {
      "commit": "d3233abdf14f173bb99e3905e8543ffff845230e",
      "tree": "e1fd1abd81da728cd004b1982f7c04cccfa7d6b0",
      "parents": [
        "0e920facfcc1cdc12f08ef269746563f8f801f9b",
        "718e8319c728e9ee2ec15b1d56ca96baa4393028"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Wed Jan 24 21:26:25 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 24 21:26:25 2018 +0000"
      },
      "message": "Merge \"ART: Use the bitstring type check for AOT app compilation.\""
    }
  ],
  "next": "8c0961f9e061ee4b04c1c4ba8ad5cca13bcf884d"
}
