)]}'
{
  "log": [
    {
      "commit": "4dc6589f392d46800a3b64625245bdfe4bbbfc2f",
      "tree": "b159262fd300a650ab89277667641ebe7e13d357",
      "parents": [
        "e0386f10d4591afa9823658099e4f2ac7a693255"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 05 17:43:35 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 07 07:13:01 2021 +0000"
      },
      "message": "Don\u0027t wrap VerifyError into NoClassDefFoundError.\n\nFollow RI behavior by returning the VerifyError. NoClassDefFoundError\nonly wraps initializer errors.\n\nAlso rename the field in ClassExt from verifyError to\nerroneousStateError for better clarity.\n\nAnd remove now unused feature of storing a class in the verifyError\nfield.\n\nTest: test.py\nTest: 824-verification-rethrow\nBug: 28313047\nChange-Id: I19383f7b74f22a62ab1e0b8a13bea75a14c7b33f\n"
    },
    {
      "commit": "dd411969bb486c36081926d61dbcc0bfbc8066a5",
      "tree": "aa0601299b351d41c349e64ed468cb2c9b95e6f4",
      "parents": [
        "f040914a122be86e280efe5e31af1168f2b7c72e"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jun 25 08:55:22 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 06 13:58:08 2021 +0000"
      },
      "message": "VarHandle: add StaticFieldVarHandle class\n\nAdd StaticFieldVarHandle class to keep a live reference to the\ndeclaring class for the target field of VarHandle\u0027s targeting static\nfields.\n\nBug: 191980149\nTest: art/test.py --host -r -g\nChange-Id: I3a1cada6591d146b8f9fc9066105e3b617290185\n"
    },
    {
      "commit": "b10668cb6a34398eb720f9a6305ff9a51b3ebfd4",
      "tree": "ab155a0ae3c2966c20a3de68dbf53e6fe2ced86a",
      "parents": [
        "893e2edbd5aa14ab2ccb1800ccd3154f21a2d8a7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 10 09:52:53 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 14 12:51:59 2021 +0000"
      },
      "message": "Clean up Class::GetDirectInterface().\n\nFetch array interfaces from the `IfTable`. This removes the\nonly use of the `Thread* self` argument, so we can remove\nthat argument. We also make the function non-static to avoid\nthe explicit `klass` argument. Similarly clean up arguments\nof `Class::FindClass()` and `Class::FindStaticClass()`.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: Id639b675b4eb331a777cf318eb61bd19e05de4f0\n"
    },
    {
      "commit": "b9b7d91f5ceb0b738e1774992fd6fe205c6091e9",
      "tree": "06210044d3f66a0eb72e491ba9effc13bb827ced",
      "parents": [
        "4c3ade67c470543562a0029e39b576954a807321"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Feb 24 09:24:47 2021 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Feb 25 12:12:16 2021 +0000"
      },
      "message": "Revert \"Lazily allocate DexCache arrays.\"\n\nThis reverts commit 1214319d27e7fb4c4ff00b39799df6f15288098a.\n\nReason for revert: Post-submit fails\nBug: b/181097963\nTest: TH\n\nChange-Id: I9fd21140f1703d0020458b786f48bd39889a9948\n"
    },
    {
      "commit": "1214319d27e7fb4c4ff00b39799df6f15288098a",
      "tree": "8708943822a634322bd9790c4d008210e44b3ddb",
      "parents": [
        "b7cb691fb8da124e8a6276a5a7fee47dd0aaa338"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Feb 16 14:06:31 2021 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Feb 23 15:24:27 2021 +0000"
      },
      "message": "Lazily allocate DexCache arrays.\n\nWe rarely need the DexCache for compiled code.\nDelay the allocation in hope we never need it.\n\nThis reduces DexCache memory usage by ~25% at startup.\n\nTest: m test-art-host-gtest\nTest: test.py -r -b --host\nChange-Id: I680a59c905c2b821ee954e4b32abd5d24876bd11\n"
    },
    {
      "commit": "c7993d55b2912532c1b0917e6b0ca43097bed21d",
      "tree": "1145ce1c0ffbbd729d0a6c1b53c608bf7adb3d6a",
      "parents": [
        "22538e4672348c56d4d44d6113bedd6b47d0abd0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jan 27 15:20:56 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jan 28 14:14:16 2021 +0000"
      },
      "message": "Rewrite ClassLinker::LinkFields().\n\nRewrite field offset assignment to avoid heap allocations in\nmost cases. We do one allocation if there are many fields.\n\nRewrite gap filling to prefer small gaps over big ones. This\ncreates more natural field ordering. For example,\n    class A { byte unalign; }\n    class B extends A {\n        long l;\n\tbyte a, b, c, d, e, f;\n    }\nwould have previously had offsets\n    12, 10, 14, 9, 11, 13, 15\nfor fields a, b, c, d, e, f, respectively. Now these are\n    9, 10, 11, 12, 13, 14, 15\nin line with their lexicographical order.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: boots.\nBug: 175869411\nChange-Id: I558635ac59c959dd85e8a3b015c26a6d90033853\n"
    },
    {
      "commit": "86d6cd53385eae365f16f45e1a5947cc6595eb63",
      "tree": "ce94ee1f5d574b2891163f9b9695c97142efd00d",
      "parents": [
        "af17e5f33380ad39d83c31d97a29f3c836150fa1"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Dec 02 18:13:10 2020 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Dec 04 14:31:35 2020 +0000"
      },
      "message": "Remove DexCache arrays from image.\n\nRemove the hashtable storage from the image and allocate it at\nruntime instead (but keep the DexCache object in the image).\n\nFor compiled code, we have largely moved to using .bss, so the\nDexCache just costs us unnecessary extra space and dirty pages.\n\nFor interpreted code, the hashtables are too small and will be\noverridden many times over at run-time regardless.\n\nThe next step will be to make DexCache variable-size so it can\nadapt to both of the extremes (taking minimal amount of memory\nfor compiled code and avoiding cache evictions in interpreter).\n\nTest: test.py --host\nChange-Id: I9f89e8f19829b812cf85dea1a964259ed8b87f4d\n"
    },
    {
      "commit": "2d53643ca0e05e7c67894aa75eba899acbb9f287",
      "tree": "39299475c04303312f527bc00355bd9fd7a3fad8",
      "parents": [
        "cefebc86af30522bf79d2a89a2bcf96f7f970ecb"
      ],
      "author": {
        "name": "Ian Pedowitz",
        "email": "ijpedowitz@google.com",
        "time": "Wed Jul 22 14:33:00 2020 -0700"
      },
      "committer": {
        "name": "Ian Pedowitz",
        "email": "ijpedowitz@google.com",
        "time": "Fri Jul 24 00:41:56 2020 +0000"
      },
      "message": "Update language to comply with Android’s inclusive language guidance\n\nSee https://source.android.com/setup/contribute/respectful-code for\nreference\n\nBug: 161896447\nBug: 161850439\nBug: 161336379\nTest: m -j checkbuild cts docs tests\nChange-Id: I32d869c274a5d9a3dac63221e25874fe685d38c4\n"
    },
    {
      "commit": "5868adaefe72cc8bcdcd8325c40f712375a506d1",
      "tree": "a1d4328902c4e860fe69c4e4bb34052de2530df3",
      "parents": [
        "5a62af5dc9e9bafeffcac7820e1a5b7586e58477"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 12 11:50:34 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 13 08:00:22 2020 +0000"
      },
      "message": "Move implementations from class_root.h to -inl.h .\n\nMake it possible to include the definition of enum ClassRoot\nwithout pulling in a lot of other headers.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nChange-Id: Ic90fdd70bfe0c5428a5c9a0d7901ea7e15b03488\n"
    },
    {
      "commit": "8a1a0f719e42746840f88aad079711e9d951b797",
      "tree": "2a3b3e1bc30a0b15b679f141a6d17380eded4867",
      "parents": [
        "23f3d80e307bbacfadd2160f0d5b44731e11c6e4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@fb.com",
        "time": "Tue Mar 03 16:07:45 2020 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Mar 04 21:14:58 2020 +0000"
      },
      "message": "ART: Ensure dex caches keep classloader live\n\nLive dex caches must keep their associated classloader live. Otherwise\nthe classloader may get unloaded, attempting to free DexFiles which\ncannot be unregistered.\n\nTest: art/test/testrunner/testrunner.py -b --host\nTest: m test-art-host-gtest\nChange-Id: I0eed5b3b46ed681c739d6923a57d0878afbba1a7\n"
    },
    {
      "commit": "5e251ead219d8e9f4bb1e8c53f222f91d798d653",
      "tree": "6f7c571e468f07de198f5a8021f702ee40010c45",
      "parents": [
        "8206ae846173c98b386d56ff3f290ad74a30b291"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jan 09 10:55:49 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Feb 11 23:39:56 2020 +0000"
      },
      "message": "Change j.l.r.Field to use ArtField index instead of dexFileIndex\n\nUsing the dexFileIndex to determine the ArtField a\njava.lang.reflect.Field object points to requires us to use a\ndex-cache and to update all existing Field objects if this index\nchanges (for example due to class redefinition). This could be rather\nslow. This replaces the dex-file index with the index into the\ndeclaring class\u0027s SFields/IFields arrays where the specified ArtMethod\nis stored.\n\nBug: 149236640\nTest: ./test.py --host\n\nChange-Id: I9a7d69903ece0ea94e3b3e93b4c8a872ac4073e8\n"
    },
    {
      "commit": "f1b18facd1edd6c8652c42085c5432c878507c8e",
      "tree": "856465341f025debf8a526490c7f00cee06d3694",
      "parents": [
        "2462789806df0281c52fa9bb60fa37fe3ff606b6"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 11 14:22:00 2019 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 11 14:33:19 2019 -0800"
      },
      "message": "Use explicit list of mirrored class when checking CanRedefine\n\nWe were assuming that the ClassRoots contained all the mirror\u0027d\nclasses but this is not the case. Instead we should use an explicit\nlist of the mirror\u0027d classes.\n\nTest: ./test.py --host\nTest: m test-art-host-gtest-class_linker_test64\nBug: 134162467\n\nChange-Id: Idd4c258ee0134e42afd0175b948123ea052704e1\n"
    },
    {
      "commit": "4ac0e1571e015a01d75091c3daef065f9624ad77",
      "tree": "4d13edeab88bd6fd724388c48385b0c3cca4f3a8",
      "parents": [
        "5a2301d897294ff4ee6de71f459dc2566dc3fa1a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 18 06:14:50 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 18 06:14:50 2019 +0000"
      },
      "message": "Revert \"Revert \"Basic structural redefinition support\"\"\n\nThis reverts commit 5a2301d897294ff4ee6de71f459dc2566dc3fa1a.\n\nBug: 134162467\n\nReason for revert: Relanding as unclear if issue is due to topic.\n\nChange-Id: Ib1d1cf2e9132e30c9649b760ae9ae2d8ceacf843\n"
    },
    {
      "commit": "5a2301d897294ff4ee6de71f459dc2566dc3fa1a",
      "tree": "2bd06ab3f463734994b3d251f6115514520dbb3f",
      "parents": [
        "4eb6eb40e88214fcc874d93e75660cb580cb4d58"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 18 06:11:22 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 18 06:12:13 2019 +0000"
      },
      "message": "Revert \"Basic structural redefinition support\"\n\nThis reverts commit c971eafeff43e4e26959a6e86b62ab0a8f1a6e1c.\n\nBug: 134162467\n\nReason for revert: Breaks on redefine-stress\n\nChange-Id: I4e38da23d65b5b34b26b5ab537a3583328e078a4\n"
    },
    {
      "commit": "c971eafeff43e4e26959a6e86b62ab0a8f1a6e1c",
      "tree": "f8647487e7465712fd73118ceb89e13167a12648",
      "parents": [
        "1ba7e8c10af4e270864a417044244d63db53ccf5"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Aug 13 10:50:38 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Sep 17 23:52:12 2019 +0000"
      },
      "message": "Basic structural redefinition support\n\nThis adds basic support for adding methods and fields to already\nloaded classes using redefinition. This \u0027structural class\nredefinition\u0027 is currently limited to classes without any virtual\nmethods or instance fields. One cannot currently structurally redefine\nmultiple classes at once nor will structural redefinition trigger the\nstandard redefinition events.\n\nAfter structural redefinition all references to the old class, and its\nfields and methods are atomically updated. Any memory associated with\nthe static fields of the old class is zeroed. Offsets for field access\nmight change.  If there are any active stack frames for methods from\nthe redefined class the original (obsolete method) code will continue\nto execute. The identity hash code of the redefined class will not\nchange. Any locks being held, waited or blocked on by the old class\nwill be transferred to the new class.\n\nTo use this feature the process must be debuggable and running with\n-Xopaque-jni-ids:true.\n\nFor device testing use a wrap.sh that adds the following flags:\n\n    \u0027-Xopaque-jni-ids:true -Xcompiler-option --debuggable -XjdwpProvider:adbconnection\u0027\n\nStructural redefinition only available using the\n\"com.android.art.UNSAFE.class.structurally_redefine_class_direct\"\nextension. This will not trigger the normal class-redefinition events.\nOnly one class may be redefined at a time.\n\nNB There are still some holes in this potentially allowing obsolete\nmethods/fields to be visible. Most notably during jni-id, MethodHandle\nand VarHandle creation as well as potentially other places in the\nruntime. These holes will be closed by later CLs. Until then the\nextension to access structural class redefinition will remain tagged\nas UNSAFE.\n\nTest: ./test.py --host --all-compiler\nBug: 134162467\n\nChange-Id: I825d3a4bdb9594c0147223ae69f433ce9bbfc307\n"
    },
    {
      "commit": "bf12191214c0d6215a98dfe846a51230d995dad9",
      "tree": "085c1059014ce66fdb7eceb6e8502d906f0eacbd",
      "parents": [
        "78342419743cb6d0f17dc2d4c0cd99d18d9c83d6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 04 13:49:05 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jul 26 11:10:26 2019 +0000"
      },
      "message": "Implement ClassStatus::kVisiblyInitialized.\n\nPreviously all class initialization checks involved a memory\nbarrier to ensure appropriate memory visibility. We change\nthat by introducing the kVisiblyInitialized status which can\nbe checked without a memory barrier. Before we mark a class\nas visibly initialized, we run a checkpoint on all threads\nto ensure memory visibility. This is done in batches for up\nto 32 classes to reduce the overhead.\n\nAvoiding memory barriers in the compiled code reduces code\nsize and improves performance. This is also the first step\ntoward fixing a long-standing synchronization bug 18161648.\n\nPrebuilt sizes for aosp_taimen-userdebug:\n - before:\n   arm/boot*.oat: 19150696\n   arm64/boot*.oat: 22574336\n   oat/arm64/services.odex: 21929800\n - after:\n   arm/boot*.oat: 19134508 (-16KiB)\n   arm64/boot*.oat: 22553664 (-20KiB)\n   oat/arm64/services.odex: 21888760 (-40KiB)\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots\nTest: run-gtests.sh -j4\nTest: testrunner.py --target --optimizing\nTest: Manually diff `m dump-oat-boot` output from before\n      with output after this CL without codegen changes,\n      with `sed` replacements for class status. Check that\n      only checksums and the oatdump runtime values of\n      DexCache.dexFile differ.\nBug: 18161648\nBug: 36692143\nChange-Id: Ida10439d347e680a0abf4674546923374ffaa957\n"
    },
    {
      "commit": "79d6c800cd8aa1da335ea0523c391852780ac02a",
      "tree": "a77faf41d7b658709113c72d7eaaaa1ce2ded6b5",
      "parents": [
        "01fbfbebceb00b94cc54738ebf425b6c4a79211a"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jun 27 15:50:11 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jun 28 14:58:17 2019 +0000"
      },
      "message": "Revert^2 \"Support using opaque JNI ids\"\n\nWe weren\u0027t handing the fact that encoding jmethodIDs could cause OOM\nexceptions in some places in reflection.cc. This could lead to\nattempting to use a null jmethodID as if it were a real id. This issue\nis fixed by the parent CL.\n\nThis reverts commit b476a29a2c.\nThis reverts commit 3b2905366c.\nThis Unreverts commit d5d645ffec.\nThis Unreverts commit 21d5994583.\n\nReason for revert: Fixed issue causing 004 debuggable flakes\nTest: ./test.py --host --jit --debuggable\nBug: 134162467\n\nChange-Id: Iece08ab299cd8a20f8382be7be6c3796858e70eb\n"
    },
    {
      "commit": "b476a29a2cda22b86fc1d96e4cc65ce36fb878af",
      "tree": "039eaee2edf5495275088d1c467e522977c6bcd6",
      "parents": [
        "3b2905366c6ee1eaba2d6477078e505e377343ec"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 27 07:54:48 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jun 27 08:16:04 2019 +0000"
      },
      "message": "Revert \"Support using opaque JNI ids\"\n\nThis reverts commit 21d5994583c679cd5d8573b5d35dbd659bdca2c7.\n\nBug: 134162467\n\nReason for revert: Breaks debuggable\n\nChange-Id: I9510a6ac208d392ff25ee196a1a519fecd151445\n"
    },
    {
      "commit": "21d5994583c679cd5d8573b5d35dbd659bdca2c7",
      "tree": "521906398a2f04048cc51b4f409b6a3ebc0c6ffa",
      "parents": [
        "5dfbe7ae9ed9a1a82446d32118190105a211a2d2"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jun 19 12:58:22 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jun 26 20:22:39 2019 +0000"
      },
      "message": "Support using opaque JNI ids\n\nCurrently JNI ids (jmethodID \u0026  jfieldID) are created by simply\ncasting the corresponding ART structure pointer. This is great for\nsimplicity but means we are prevented from performing operations that\ncould change these pointer values. To support these use-cases add\nsupport for loading the runtime with a layer of indirection between\nthese ids and the internal art data types.\n\nCurrently the JNI id type can be toggled only by passing the new\n\u0027-Xopaque-jni-ids:{true,false}\u0027 flag during startup.\n\nThis changes the --debuggable test configuration to pass\n\u0027-Xopaque-jni-ids:true\u0027 in order to get test coverage of this feature\nusing the \u0027art-jit\u0027 configuration.\n\nTest: ./test.py --host --debuggable\nTest: ./test.py --host --debuggable --jit-on-first-use\nTest: ./test/testrunnner/run_build_test_target.py art-jit\nBug: 134162467\nChange-Id: Id8c8cb9a5b8ff18dc2f40892fae2d344a7214f44\n"
    },
    {
      "commit": "3068d582eff4552ff260d7966fcbdc93e17d0207",
      "tree": "bc894a414070a06ea2a231fb98607b57b8c3b0cb",
      "parents": [
        "991cd5cc16267b74e390f640eb441102062babb6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 28 16:39:29 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 31 14:15:59 2019 +0000"
      },
      "message": "Clean up creating handles from `this`.\n\nMake these member functions static and take an additional\nparameter `Handle\u003c.\u003e h_this`. Callers mostly already have\na Handle\u003c\u003e to pass, so we avoid an extra StackHandleScope.\nThis pattern was already used for some functions.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --interpreter\nChange-Id: I4f4478b0526bcb2f3c23305d3b3cc4a65fff9ff5\n"
    },
    {
      "commit": "dfc0de7696a50a9aeee95dcf74dac036e3334314",
      "tree": "20a6edd33cca852f8e65ce8d20a85949b566904c",
      "parents": [
        "9ef308da0ea8d1df2edf65d4957599fafcc56aeb"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Apr 01 10:57:55 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 02 07:57:27 2019 +0000"
      },
      "message": "Partially ObjPtr\u003c\u003e-ify Object, fix stale ref in test.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: I0c0bc669c0ab8d99185e662a2fec16f32a42a0a2\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": "5aead700219d9c9fc05524d5d72dc32cb1807c61",
      "tree": "84dac95f7627fefc8fd8d3dfbd5d6baf5d1e1a01",
      "parents": [
        "4f1e3288a845b91a5ce369865ec7e249f4f94622"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 27 11:00:36 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 28 09:22:07 2019 +0000"
      },
      "message": "ObjPtr\u003c\u003e-ify method/var handles, fix stale refs in tests.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --interpreter\nBug: 31113334\nChange-Id: I89ea84f7970899643e437161b598d3232a182e98\n"
    },
    {
      "commit": "e512556ab85987c52e4be1fcd6d7a1d15a1b0fb6",
      "tree": "16e82b22829a269dcb7b8c305bb0a44c6f74c58e",
      "parents": [
        "2f34e59c10c30ea24fa5f4bc4e3d5a9dc6469c34"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 06 17:38:26 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 07 12:29:35 2019 +0000"
      },
      "message": "Replace StringPiece with std::string_view in profman.\n\nAnd in dexoptanalyzer and hiddenapi, see below.\n\nThe parsing helpers in utils.h were mostly unused, only\nprofman was calling one of them, so move that helper to\nprofman and rewrite and fix it, remove the other helpers.\nThis exposed dependency of dexoptanalyzer and hiddenapi\non StringPiece indirectly included from utils.h, thus we\nreplace it with std::string_view also in those tools.\n\nDuring the rewrite, avoid using std::string_view::data()\nas a null terminated string, prefer to fall back to the\noriginal null terminated raw option instead.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 123750182\nChange-Id: Ibeec8069a5d82ea556e03e4577812f94dca6f387\n"
    },
    {
      "commit": "7210108e6d930f9b8bcf5eac6b7a03ea29f92f84",
      "tree": "809a2477f11a98eeb5f258635489424841e6feba",
      "parents": [
        "2ef01100bb56b3f8ab5fbc886a7066d721290d74"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Feb 05 16:16:30 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 06 14:05:17 2019 +0000"
      },
      "message": "Replace StringPiece with std::string_view in art/runtime/.\n\nAnd in art/test/.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 123750182\nChange-Id: I14c7cddd7ba4fb2183c643d32a89b594008d8bd0\n"
    },
    {
      "commit": "eb37ba594146338bf7e7e2bf3769d08046fb263f",
      "tree": "7fac104aed3aec8d8390c8cbe1f7fbd85b4f998a",
      "parents": [
        "e027d727b833930f1bd0029bc1b2cf750d8af5da"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Feb 05 14:10:38 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 06 12:24:10 2019 +0000"
      },
      "message": "Replace StringPiece with std::string_view in Signature.\n\nAnd also in Signature-related code. Remove the function\nDexFile::CreateSignature() which was used only in a test\nas the test can use method searching functions that take\nstd::string_view instead.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 123750182\nChange-Id: I3f24c8f4f677e2e40503dbab347df1eb031b4132\n"
    },
    {
      "commit": "ad1aa6340567c0660506069d760ff41483eb3821",
      "tree": "dbceabc90859e9353a8683d8be02a702205be9c9",
      "parents": [
        "b8bca301eff0db87d37bc4ab898a4973d211019b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 02 10:30:54 2019 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jan 03 09:19:10 2019 -0800"
      },
      "message": "ART: Move Signature to its own header\n\nReduce the dependencies on dex_file.h\n\nBug: 119869270\nTest: mmma art\nChange-Id: I1450fe2c3f4a7f5b535ed38cc19cb8a053228541\n"
    },
    {
      "commit": "3f1dcd39e134d994ac88dcc4f30ec8cabcd8decf",
      "tree": "365d20ad6b68ff1dbd4903764b63880324136e4d",
      "parents": [
        "0f0a4e40667c87fbd4ae5480eddbfd701bfabfa2"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Dec 28 09:39:56 2018 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jan 02 10:32:25 2019 -0800"
      },
      "message": "ART: Move dex structs into own header\n\nSeparating out the structs from DexFile allows them to be forward-\ndeclared, which reduces the need to include the dex_file header.\n\nBug: 119869270\nTest: m\nChange-Id: I32dde5a632884bca7435cd584b4a81883de2e7b4\n"
    },
    {
      "commit": "5b20b358edb0c586ae2106a82be365717da82507",
      "tree": "3cda8d9774087f3f6b80681f18d03c271d113fbf",
      "parents": [
        "62f6e9055363df6b6372d86960e8d987d6c439a1"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Oct 11 19:03:20 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 13 10:52:08 2018 -0800"
      },
      "message": "ART: Rewrite EnsureInitialized hit case\n\nWhen an initialized class is found during EnsureInitialized, do\nnot check whether verification was attempted and fix up bits.\nInstead, ensure that all class-loading paths have that done\nwhen eventually getting here.\n\nSpecial runtime-constructed classes (primitives, arrays, proxies)\nneed code to do this work. \"Normal\" classes have the work done\nduring VerifyClass.\n\nLeave a DCHECK in as a state check. Protect state transfers with\nadditional checks.\n\nThis reduces the overhead of the interpreter which cannot elide\ninitialization checks for static accesses.\n\nBug: 115834172\nTest: m test-art-host\nChange-Id: Iacd6652583364509c37eafe81fed1198abb1b71a\n"
    },
    {
      "commit": "1a6586327d9de6374f9e7ca98d071f2943b03c99",
      "tree": "1d118af8f32855ef0036080d5e8a560f14e5e482",
      "parents": [
        "d378a567a435a80be9ab7eb8bfe0359c1240c0ff"
      ],
      "author": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Sat Dec 01 17:54:26 2018 +0000"
      },
      "committer": {
        "name": "David Brazdil",
        "email": "dbrazdil@google.com",
        "time": "Mon Dec 03 20:19:40 2018 +0000"
      },
      "message": "Keep pointer to original DexFile during JVMTI redefine for hiddenapi\n\nJVMTI redefine overwrites the pointer to the class\u0027 DexFile which\nprevents access checks from reading the hiddenapi flags store. Store\nthe pointer in ClassExt together with the original ClassDef index\nto preserve the access to flags store. Because method/field indices\nare still lost, the corresponding dex member is found using string\ncomparison of member\u0027s name and type.\n\nBug: 119688837\nTest: 999-redefine-hiddenapi\nChange-Id: Ifdf35668e838869a971233bbaae61851014658b1\n"
    },
    {
      "commit": "1ca718ec2de53fb5ef2a9211bfcc921311775c90",
      "tree": "f5ce8c3f4edd022765c343cc5a9df8ebd292f0ec",
      "parents": [
        "ce2a00daa92670a4fc01ef59fdbc3769a846f69c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 23 12:55:34 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 30 16:03:00 2018 +0000"
      },
      "message": "Add PreResolved strings dex cache array\n\nFor app images, this dex cache may be prepopulated to speed up\napplication startup. This new dex cache array is created when\n--resolve-startup-const-strings\u003dtrue.\n\nTest: test-art-host\nBug: 116059983\nBug: 118385560\n\nChange-Id: I379dc15174281665d7f4ceb106f7fbf51f89b921\n"
    },
    {
      "commit": "52ecb65ae9e1ad6fe7f58beecc88cdc08e08f0c4",
      "tree": "7a8ee84cad0df34ab33bdcb0115fc0c79d6c83be",
      "parents": [
        "c2099b0b0c052dd61137b9cf5f9f8b30bab1a7a8"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Oct 24 15:18:21 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Oct 26 08:44:12 2018 -0700"
      },
      "message": "ART: Add object-array-alloc-inl.h\n\nIn an effort to reduce the (transitive) proliferation of heap-inl\nadd a specific inline header for object array allocation.\n\nBug: 118385392\nTest: mmma art\nTest: m test-art-host\nChange-Id: I0d7c40ed53708d4c759190961b40f0cac3fe696d\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": "f73cacaae3d8f89327d8886b37792a849cabd9ac",
      "tree": "79047e31d512d065db47af7e68fa155c1f638f11",
      "parents": [
        "bbc6e7edb5fca4a61ac53dd9bce79cb4f0bb3403"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 24 17:19:07 2018 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Aug 28 11:09:40 2018 +0100"
      },
      "message": "Remove superfluous \u0027virtual\u0027 specifiers in ART.\n\nRemove \u0027virtual\u0027 specifier on methods already bearing the \u0027override\u0027\nspecifier.\n\nTest: mmma art\nChange-Id: I114930969a5ca048d88de9ecd18e2c6403593e31\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": "0b4267720380ca746abb9090364cea9ee6cb1435",
      "tree": "3e330d7241d5608858b9084a246a4bb8b88b070f",
      "parents": [
        "7583d915800ad330da0232dfdb0a4d1bda2d074c"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jul 03 23:03:42 2018 +0000"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jul 03 23:03:56 2018 +0000"
      },
      "message": "Revert \"Refactor DexFile ownership\"\n\nThis reverts commit b095f022a9683a9123018c01e22595cf969fd88b.\n\nReason for revert: Caused huge interpreter performance regression.\n\nChange-Id: I0f27f8f234d315807695362bf679ef47f68723f7\n"
    },
    {
      "commit": "b095f022a9683a9123018c01e22595cf969fd88b",
      "tree": "ccbf6e69ca17f4677186f4e148e1f9baf8bc7ae4",
      "parents": [
        "b5271dd44a30f498689e503340d3c8d01bf31f07"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Jun 22 14:38:51 2018 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Jun 27 18:14:50 2018 -0700"
      },
      "message": "Refactor DexFile ownership\n\nAvoid bare pointers in DexFileLoader APIs, which caused clang-tidy\nissues and other problems.\n\nBug: none\nTest: build and boot\nChange-Id: Ic277bc83af1997774b42c55d3d631ec940b9c015\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": "a8bba7d0853b372aea3ed3ea154fb2b2a23c2c9d",
      "tree": "973a89870e0cc8912401503ebab1b709a9df5ba0",
      "parents": [
        "65e463cf7ea91003ef030c8a819ae4596c9b820f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 30 15:18:48 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 31 09:48:59 2018 +0100"
      },
      "message": "ObjPtr\u003c\u003e-ify ClassLinker::FindClass(), fix 1 stale reference use.\n\nThread::CreateAnnotatedStackTrace() was using a stale\nreference `aste_array_class`.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: I191907c0053456bb57de425aa6ccd9668df818a2\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": "e9987b0831403858d95bdd7a5ef9e56665a9702d",
      "tree": "3950da94b73665a52eb5e2b9c5aecc8c92145f13",
      "parents": [
        "6ec2a1bf1cbecf17546df780dd0ad769042e1874"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 22 16:26:43 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 23 15:16:45 2018 +0100"
      },
      "message": "ObjPtr\u003c\u003e-ify tests using ClassLinker::FindClass().\n\nClassLinker::FindClass() returns a non-ObjPtr\u003c\u003e reference\nbut it has a lot of uses, so we shall change the uses in\na few steps. This change deals with several tests.\n\nTest: Rely on TreeHugger.\nBug: 31113334\nChange-Id: Ib75e20e7ebaff01fb607a09f96675f8cf397ae52\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": "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": "2c64a837e62c2839521c89060b5bb0dcb237ddda",
      "tree": "65475ed2e313ff17354e741bac7e9c85739b8b95",
      "parents": [
        "6cd0005698181e4cef2247b632d396e605d58fa3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jan 04 11:31:56 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jan 05 11:27:50 2018 +0000"
      },
      "message": "Change ClassStatus to fit into 4 bits.\n\nIn preparation for extending the type check bit string from\n24 to 28 bits, rewrite ClassStatus to fit into 4 bits. Also\nperform a proper cleanup of the ClassStatus, i.e. change it\nto an enum class, remove the \"Status\" word from enumerator\nnames, replace \"Max\" with \"Last\" in line with other\nenumerations and remove aliases from mirror::Class.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: Pixel 2 XL boots.\nTest: testrunner.py --target --optimizing\nBug: 64692057\nBug: 65318848\nChange-Id: Iec1610ba5dac2c527b36c12819f132e1a77f2d45\n"
    },
    {
      "commit": "ffad66818572eb902f281057f85fa5bf031c66d5",
      "tree": "29d019b3c47ad155e911b811a9827659c912b284",
      "parents": [
        "ee821204e80b736a4c1e59c359436358b68a0671"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Jan 02 10:18:58 2018 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Jan 02 10:31:09 2018 +0000"
      },
      "message": "ART: Add test for ArrayElementVarHandle offsets.\n\nFixes omission in 005ac512de3d734624a5db39bb14b71763ba730d.\n\nTest: art/test.py --host -g -j32\nBug: 65872996\nChange-Id: I085f8a56661012ca3b5a380d8c644aec88b7e441\n"
    },
    {
      "commit": "666ee3d7c6039c80e75287e311895bd6a9b01e9f",
      "tree": "5e65f39ff7cc83af4be3b691c247d7348052f854",
      "parents": [
        "890111968fbd3f5ae528d97e42984c12a3dd27bd"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Dec 11 18:37:36 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 12 13:48:02 2017 +0000"
      },
      "message": "Do not pass DexFile to ClassLinker::Lookup/ResolveType().\n\nThe DexFile can be easily retrieved from the DexCache,\nso reduce the number of arguments that need to be passed.\n\nAlso refactor the code to avoid doing the DexCache lookup\ntwice and avoid unnecessary read barriers in the initial\nDexCache lookup (also for Lookup/ResolveField()).\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: Idea9aa42b6a5bade947e93e330b1abdb9d11b2da\n"
    },
    {
      "commit": "af94020190a2153834e30fc962e28c3b63d7ffc2",
      "tree": "3f08bb09dd6d5ded7a6c85e812f1cba54ca83285",
      "parents": [
        "e11dd50ac2b5ccbf3b02213b7361f55b1f1a90da"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 08 15:01:18 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 08 18:31:50 2017 +0000"
      },
      "message": "Do not pass DexFile to ClassLinker::ResolveMethodType().\n\nThe DexFile can be easily retrieved from the DexCache,\nso reduce the number of arguments that need to be passed.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I00634b89013b7348460aa73561fa14be7c8cdb7e\n"
    },
    {
      "commit": "28e012a4af2d710e5e5f824709ffd6432e4f549f",
      "tree": "576ebdbff9d5f9f098cd29d652215b8f67b6b042",
      "parents": [
        "4388fb213ec746ee18a6bea38ee894f8c19990b9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Dec 07 11:22:59 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 08 15:27:27 2017 +0000"
      },
      "message": "Determine HLoadClass/String load kind early.\n\nThis helps save memory by avoiding the allocation of\nHEnvironment and related objects for AOT references to\nboot image strings and classes (kBootImage* load kinds)\nand also for JIT references (kJitTableAddress).\n\nCompiling aosp_taimen-userdebug boot image, the most memory\nhungry method BatteryStats.dumpLocked() needs\n  - before:\n    Used 55105384 bytes of arena memory...\n    ...\n    UseListNode    10009704\n    Environment      423248\n    EnvVRegs       20676560\n    ...\n  - after:\n    Used 50559176 bytes of arena memory...\n    ...\n    UseListNode     8568936\n    Environment      365680\n    EnvVRegs       17628704\n    ...\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nBug: 34053922\nChange-Id: I68e73a438e6ac8e8908e6fccf53bbeea8a64a077\n"
    },
    {
      "commit": "2ffb703bf431d74326c88266b4ddaf225eb3c6ad",
      "tree": "0552c3c76a42b18f9e7460d501fb71a6dc2e7f33",
      "parents": [
        "c4b6f3116f15c8e4fdf2e4f604ababdee12d8923"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Wed Nov 08 13:35:21 2017 -0800"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Wed Nov 08 15:15:52 2017 -0800"
      },
      "message": "cpplint: Cleanup errors\n\nCleanup errors from upstream cpplint in preparation\nfor moving art\u0027s cpplint fork to upstream tip-of-tree cpplint.\n\nTest: cd art \u0026\u0026 mm\nBug: 68951293\nChange-Id: I15faed4594cbcb8399850f8bdee39d42c0c5b956\n"
    },
    {
      "commit": "4098a7ad22535212c193f5c66eaf8a7387e1b7fc",
      "tree": "b6fbfef133515376185b769ea2c9625a6a637a04",
      "parents": [
        "383684585824efa60350b208b92362efab3962eb"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 06 16:00:51 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Nov 06 16:24:06 2017 +0000"
      },
      "message": "Refactor ArtField::GetType\u003c\u003e() as {Lookup,Resolve}Type().\n\nAnd add no thread suspension assertion to LookupType()\nas well as ArtMethod::LookupResolvedClassFromTypeIndex().\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: If1541ccb0aafeabb6d1dd5566f10afcac98a2ef1\n"
    },
    {
      "commit": "005ac512de3d734624a5db39bb14b71763ba730d",
      "tree": "ef109d3d3ee408fa2d3759dab89f381675c8f934",
      "parents": [
        "a4d89d9bb911f7f3d0a6e4d3b45372e0aea6476d"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Oct 24 15:43:43 2017 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Nov 02 09:00:16 2017 +0000"
      },
      "message": "ART: Add mirror classes for VarHandles\n\nAdds mirror classes for VarHandle, FieldVarHandle,\nArrayElementVarHandle, ByteArrayViewVarHandle and\nByteBufferViewVarHandle.\n\nBug: 65872996\nTest: art/test.py --host -g -j32\nChange-Id: I34e4b53c21cd969b54003dcfa3527acb963bfec7\n"
    },
    {
      "commit": "733bd4d85ccebe7a4e78aa6c8c4c691fde47843b",
      "tree": "d94bb13c8eea14d00c180c618bf54f6cd9a2aea6",
      "parents": [
        "5751dc831ffd8acb089c2aff2e2ddf18f89da975"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Oct 26 10:39:15 2017 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Oct 27 08:53:41 2017 -0700"
      },
      "message": "Separate MemMap from DexFile completely\n\nCreate a container class for holding ownership of MemMap and segregate\nthat functionality to dex_file_loader.  This removes the dependency\nbetween dex_file.cc and mem_map.cc.\n\nBug: 22322814\nTest: make test-art-host\nChange-Id: I96db6fd10cdbad774c2f1f85c249418a154fbd52\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": "292567ee71a20bfc59513c6af290495e4b92b2cb",
      "tree": "6f2fb5ed3caec12b2193b179864dcd87578d2f52",
      "parents": [
        "b95f45e67a3e4a14aab63b19f101547658d7514b"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 12 13:24:38 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 12 13:48:31 2017 -0700"
      },
      "message": "Rename NativeDexFile -\u003e StandardDexFile\n\nMotivation: The new name is cleaner.\n\nBug: 63756964\nTest: test-art-host\nChange-Id: I0e52015dbd929fe247305070cef03d86bcdeb54b\n"
    },
    {
      "commit": "7b074bf1ce559541d0c19ef793d9702a415ff74d",
      "tree": "acaf022c330649de7a1a4b372308132f44091c70",
      "parents": [
        "432d91004b79c79deebeee6f6197e43adf6caafd"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Sep 25 16:22:36 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 11 11:30:11 2017 -0700"
      },
      "message": "Add a shared interface for different types of dex files\n\nRepurposed DexFile to be the shared API. Will be used for abstracting\naccesses to original dex files and CompactDex files.\n\nAs implementation diverges, functionality will be moved from DexFile\naccordingly.\n\nWill consider renaming DexFile -\u003e IDexFile in a follow up CL.\n\nBug: 63756964\nTest: test-art-host\n\nChange-Id: Iad2508c2b9a7b6e0669fca5f7d10299a9b1541a2\n"
    },
    {
      "commit": "5122e6ba34d46851cd89f2ad55bf6bb067e038d6",
      "tree": "e96ba37b6451be7a06d930b0274251cac35ce05e",
      "parents": [
        "02cb397857c979dffae95e2db2678a72ec407cf0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Aug 17 16:10:09 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Aug 29 11:29:31 2017 +0100"
      },
      "message": "ART: Remove ArtMethod::dex_cache_resolved_methods_.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: testrunner.py --target on Nexus 6P\nTest: Repeat the above tests with ART_HEAP_POISONING\u003dtrue\nTest: Build aosp_mips64-eng\nChange-Id: I9cd0b8aa5001542b0863cccfca4f9c1cd4d25396\n"
    },
    {
      "commit": "8cf9cb386cd9286d67e879f1ee501ec00d72a4e1",
      "tree": "88e86e214b425e444760fe4e0ffeee677e1558a2",
      "parents": [
        "914b7b6a6c9f399b26b41e9160e9871ef749e0db"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Jul 19 09:28:38 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jul 24 16:07:10 2017 -0700"
      },
      "message": "ART: Include cleanup\n\nLet clang-format reorder the header includes.\n\nDerived with:\n\n* .clang-format:\n BasedOnStyle: Google\n IncludeIsMainRegex: \u0027(_test|-inl)?$\u0027\n\n* Steps:\n find . -name \u0027*.cc\u0027 -o -name \u0027*.h\u0027 | xargs sed -i.bak -e \u0027s/^#include/ #include/\u0027 ; git commit -a -m \u0027ART: Include cleanup\u0027\n git-clang-format -style\u003dfile HEAD^\n manual inspection\n git commit -a --amend\n\nTest: mmma art\nChange-Id: Ia963a8ce3ce5f96b5e78acd587e26908c7a70d02\n"
    },
    {
      "commit": "07bfbace6f835e6c748fd68ec7624992478b16c1",
      "tree": "5d094a00fbc90455bd9b53e042cf8b4fe8433462",
      "parents": [
        "ba118827465d12177f3996e50133960087b1c916"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 06 14:55:02 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 20 16:33:00 2017 +0100"
      },
      "message": "Hash-based DexCache methods array.\n\nTotal boot*.art size for aosp_angler-userdebug:\n  - arm64:\n    - before: 11603968\n    - after: 10129408 (-1.4MiB, -12.7%)\n  - arm:\n    - before: 8626176\n    - after: 7888896 (-0.7MiB, -8.5%)\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: Nexus 6P boots.\nTest: testrunner.py --target\nTest: Build aosp_mips64-eng\nBug: 30627598\nChange-Id: I7f858605de5f074cbd7f0d9c4c072fbd44aee28f\n"
    },
    {
      "commit": "ba118827465d12177f3996e50133960087b1c916",
      "tree": "f39728cdafc7810004d51c0bef2728b98993daa9",
      "parents": [
        "64a102dde8c5daad83b991710decb418ce43aac5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 12 15:41:56 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 20 13:35:06 2017 +0100"
      },
      "message": "ART: Change method lookup to be more consistent to JLS and the RI.\n\nThe method lookup for different invoke types was previously\nwidely different and didn\u0027t work well with the dex cache\nmethod array where we have only a single slot for each\nMethodId. The new behavior is to perform the same lookup for\nall cases, distinguishing only between interface and\nnon-interface referencing class, and to further align the\nbehavior with the JLS and the RI. Where the JLS conflicts\nwith the RI, we follow the JLS semantics.\n\nThe new lookup for class methods first searches the methods\ndeclared in the superclass chain (ignoring \"copied\" methods)\nand only then looks in the \"copied\" methods. If the search\nin the superclass chain finds a method that has not been\ninherited (i.e. either a private method or a package-access\nmethod where one of the classes in the chain does not belong\nto the same package, see JLS 8.4.8), we still search the\n\"copied\" methods as there may actually be a method inherited\nfrom an interface. This follows the JLS semantics where\ninherited methods are included in the search (JLS 15.12.2.1)\nbut conflicts with the RI where the private or\npackage-access method takes precedence over methods\ninherited from interfaces.\n\nNote that this search can find an accessible method that is\nnot inherited by the qualifying type, either for a package\naccess method when the referrer is in the same package but\nthe qualifying type is in another package, or for a private\nmethod where the referrer is in the same class but the\nqualifying type is actually a subclass. For the moment we\nallow such calls and we shall consider whether to throw\nan IncompatibleClassChangeError in this situation in future\nto comply with JLS 15.12.4.3.\n\nThe new lookup for interface methods searches the interface\nclass, then all the superinterfaces and then the\njava.lang.Object class, see implicitly declared methods in\ninterfaces, JLS 9.2. The search for the maximally-specific\nnon-abstract superinterface method is not yet implemented,\nbut the difference should be difficult to observe as the\nusual subsequent call to FindVirtualMethodForInterface()\nshould yield the same result for any matching method.\n\nThe new test 162-method-idx-clash exposes several cases\nwhere we previously completely messed up due to the effects\nof the DexCache, or where we were out of line with the RI.\nIt also tests a case where the JLS and the RI disagree and\nwe follow the JLS.\n\nTest: art/test/run-test --host --jvm 162-method-resolution\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nTest: testrunner.py --host --interp-ac\nTest: Nexus 6P boots.\nTest: testrunner.py --target\nBug: 62855082\nBug: 30627598\nChange-Id: If450c8cff2751369011d649c25d28a482a2c61a3\n"
    },
    {
      "commit": "e64ed9ebf4873844ee26bdb50466e264560fb6a6",
      "tree": "be6a8a3b9a0fd5963de2156864ebedf355d25b00",
      "parents": [
        "7b46197bc2459b3324e0049277a911e31414bb52"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Jul 06 22:01:00 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Jul 06 22:01:00 2017 -0700"
      },
      "message": "Remove java.lang (re)definition tests from class_linker_test\n\nThere is a dx issue when processing extensions of java.lang package.\n\n\"\n...\ntrouble processing \"java/lang/JavaLangFromD.class\".\nIll-advised or mistaken usage of a core class (java.* or javax.*)\nwhen not building a core library.\n...\n\"\n\nRemove the checks until we figure out how to verify this behavior on all\nour configurations.\n\nThis is a partial revert of commit\ncdd4912eef02cce1ae4ec95e025794dced089466.\n\nTest: ANDROID_COMPILE_WITH_JACK\u003dfalse cmma\ntest-art-host-gtest-class_linker_test\nBug: 38138251\n\nChange-Id: Ib05253eaebab1299dfb36b54a7c99d3362a7ed72\n"
    },
    {
      "commit": "cdd4912eef02cce1ae4ec95e025794dced089466",
      "tree": "d212b7d061f5dad7861945b9d86cea728e68d133",
      "parents": [
        "7865ac7e233b8a8dcfd6ca8466d30b39a8089c3e"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jul 05 20:09:53 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Jul 06 12:32:16 2017 -0700"
      },
      "message": "Add fast path to FindClass for DelegateLastClassLoader\n\nTest: m test-art-host\nBug: 38138251\nChange-Id: I8d0f534195c31a5d291e38b0eea47534a5d471fb\n"
    },
    {
      "commit": "7865ac7e233b8a8dcfd6ca8466d30b39a8089c3e",
      "tree": "c845ef2149d819dd512b87f1898aff6d583f91c6",
      "parents": [
        "415dc3d63fc05f89b77c2f6249a5a89dade4df27"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Jun 28 11:03:12 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Jul 06 12:05:54 2017 -0700"
      },
      "message": "Add DelegateLastClassLoader to the list of WellKnownClassLoaders\n\nGeneralize CreatePathClassLoader from the class linker to be able to\ncreate a well known class loader with a given parent.\n\nFor now, it only supports PathClassLoader and DelegateLastClassLoader.\n\nTest: m test-art-host\nBug: 38138251\nChange-Id: Iced0de7c21010c6d61dbf29a631e670011833a7d\n"
    },
    {
      "commit": "b486a98aadc95d80548953410cf23edba62259fa",
      "tree": "b113b7d50a4a015502873b7742c9ece00d293e84",
      "parents": [
        "1656ca9e6996cb555b4463e5efd4bd7e3f4fb816"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 01 13:45:54 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 02 08:24:02 2017 -0700"
      },
      "message": "ART: Introduce thread-current-inl.h\n\nFactor out Thread::Current() code into its own -inl file to remove\ntransitive includes.\n\nThis requires at the same time correcting mutex.h, i.e., moving\nsome functions into mutex-inl.h.\n\nTest: m test-art-host\nChange-Id: I88f888b604e0897368d9b483edce6ce4332dd9c9\n"
    },
    {
      "commit": "2f814aab42591b7b4093d79851d9d2920538a5ef",
      "tree": "7ff34f1d63f8520208dd4689171968bbc59f983b",
      "parents": [
        "a7c04c4fe6623985ba2d0cca942d5e1e584f4358"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Mar 24 15:21:34 2017 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Mar 24 15:27:20 2017 -0700"
      },
      "message": "Revert \"Revert \"Make original dex file be more deduplicated\"\"\n\nThis reverts commit a7c04c4fe6623985ba2d0cca942d5e1e584f4358.\n\nReason for revert: Issue with target buildbots was fixed\n\nTest: m clean \u0026\u0026 ./test.py --target -j8\nBug: 31455788\n\nChange-Id: If00ef9433a9308810a40ea4e0d809987c934cef8\n"
    },
    {
      "commit": "a7c04c4fe6623985ba2d0cca942d5e1e584f4358",
      "tree": "ede1a98db77cfb0a05e3d445b7e1f7aed3d242d3",
      "parents": [
        "9556cb2bfc6788656d53a9ddb2159ca2040f6e38"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 24 08:55:08 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 24 08:55:08 2017 +0000"
      },
      "message": "Revert \"Make original dex file be more deduplicated\"\n\nBug: 31455788\n\nThis reverts commit 9556cb2bfc6788656d53a9ddb2159ca2040f6e38.\n\nChange-Id: If22f2bd9d1b788c2a784dbe0e7f0c2304d8e4a59\n"
    },
    {
      "commit": "9556cb2bfc6788656d53a9ddb2159ca2040f6e38",
      "tree": "7ff34f1d63f8520208dd4689171968bbc59f983b",
      "parents": [
        "f11cbe1361cc93f07e7a5ab1c9f0af4605552535"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Mar 21 11:21:36 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Mar 22 09:43:30 2017 -0700"
      },
      "message": "Make original dex file be more deduplicated\n\nNow when retransformClasses is called we will use the DexCache from\nthe transformed class to hold the original dex file. This means that\nthere should be fewer redundant copies of dex files lying around from\nclass redefinition.\n\nBug: 31455788\nTest: mma -j40 test-art-host-gtest\nTest: ./test/testrunner/testrunner.py --host -j40\n\nChange-Id: I60150e436d79aabb36da31ec679cb7ec4c820573\n"
    },
    {
      "commit": "6b2dc3156a2140a5bfd9cbbf5d7dad332ab5f5bd",
      "tree": "a335cae93c0eabae63e39b8bc13ef3e15f4f7e50",
      "parents": [
        "f83f3f6ecb1153d96cc8007e8a0d1e35af4d3f38"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Mar 14 13:26:12 2017 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Mar 16 17:56:04 2017 +0000"
      },
      "message": "ART: Get rid of most of java.lang.DexCache.\n\nAll remaining functionality is moved over to native. The DexCache\nobject itself is allocated in the Java heap, even though there\u0027s no\nlonger much of a reason to do so. It can be changed in a future change\nif needed.\n\nThis also renames mirror::Class:GetInterfaces to GetProxyInterfaces\nsince it\u0027s supposed to be called only for proxies.\n\nTest: test-art-host, cts -m CtsLibcoreTestCases\n\nChange-Id: Ie261f22a9f80c929f01d2b456f170c7a464ba21c\n"
    },
    {
      "commit": "8d6768d47b66a688d35399d524ad5a5450e9d9d4",
      "tree": "0b8733baef378d9e060c8e74319a3846489590b2",
      "parents": [
        "fbe1516b91f2117bb9c7282aaea5537572f62dd7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 14 10:13:21 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 14 13:55:13 2017 +0000"
      },
      "message": "Revert^6 \"Hash-based dex cache type array.\"\n\nFixed ImageWriter to write class table also if it contains\nonly boot class loader classes. Added a regression test and\nadded extra checks for debug-build to verify that dex cache\ntypes from app image are also in the class table. Removed\nsome unnecessary debug output.\n\nTest: 158-app-image-class-table\nBug: 34839984\nBug: 30627598\nBug: 34659969\n\nThis reverts commit 0b66d6174bf1f6023f9d36dda8538490b79c2e9f.\n\nChange-Id: I6a747904940c6ebc297f4946feef99dc0adf930c\n"
    },
    {
      "commit": "0b66d6174bf1f6023f9d36dda8538490b79c2e9f",
      "tree": "1cc4d2ae868745a65fd0489a6fb2f5f2fc9e880f",
      "parents": [
        "6374c58f2ea403b3a05fb27376110fe4d0fc8e3f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 13 14:50:04 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 13 16:08:01 2017 +0000"
      },
      "message": "Revert^5 \"Hash-based dex cache type array.\"\n\nFor app images, ImageWriter does not add boot image\nclasses to the app image class table even though it\nkeeps them in the dex caches. The reason for that is\nunknown, the code looks OK.\n\nBug: 34839984\nBug: 30627598\nBug: 34659969\n\nAlso reverts \"Improve debugging output for a crash.\"\n\nThis reverts commits\n    bfb80d25eaeb7a604d5dd25a370e3869e96a33ab,\n    8dd56fcb3196f466ecaffd445397cb11ef85f89f.\n\nTest: testrunner.py --host\nChange-Id: Ic8db128207c07588c7f11563208ae1e85c8b0e84\n"
    },
    {
      "commit": "6e311acac755e0446660fdda955e9352895f2b01",
      "tree": "19d654b562d328c338f95c05687d3170d207ab7e",
      "parents": [
        "69c4c27cc965620511e876248f679bbcf4fde646"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Feb 27 11:46:03 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Feb 27 12:48:57 2017 +0000"
      },
      "message": "Re-arrange System.identityHashCode for better performance.\n\nBrings in ~8% improvement to Ritz::EvaluateComplexFormulas.\n\nTest: run-libcore-tests test-art-host\nbug: 30933338\nChange-Id: I9966da4143d013caf2e610eb176c0a8fffabca45\n"
    },
    {
      "commit": "bfb80d25eaeb7a604d5dd25a370e3869e96a33ab",
      "tree": "96068dd9b9b3bc2e1bcc25d38bbd2420d5b0f1bb",
      "parents": [
        "7a49d93ee265b978ab29cae659e46d41da78459a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Feb 14 14:08:12 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 20 14:13:14 2017 +0000"
      },
      "message": "Revert^4 \"Hash-based dex cache type array.\"\n\nAdded extra output to the abort message to collect more data\nwhen we hit the crash. Added extra check when loading an app\nimage to verify that the class table isn\u0027t already broken.\n\nTest: testrunner.py --host\nBug: 34839984\nBug: 30627598\nBug: 34659969\n\nThis reverts commit 5812e20ff7cbc8efa0b8d7486ada2f58840a6ad5.\n\nChange-Id: I9bb442a184c236dcb75b3e42a095f39cd6bee59d\n"
    },
    {
      "commit": "fe35fe172a7d3469ebf1dae9cca7e1ac8aefcba7",
      "tree": "3bf964f7786227f8104eeba08fe2e1768109a764",
      "parents": [
        "a0637543dc82dfd54feda7c80da017bd39b1d2d5",
        "fa4333dcb481e564f54726b4e6f8153612df835e"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Feb 14 22:11:34 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 14 22:11:35 2017 +0000"
      },
      "message": "Merge \"ART: Add operator \u003d\u003d and !\u003d with nullptr to Handle\""
    },
    {
      "commit": "fa4333dcb481e564f54726b4e6f8153612df835e",
      "tree": "ae597c7587dc214434a180962c4373d3748f51ab",
      "parents": [
        "2d98ba68f13dc219c088a12f369c5778bf398f14"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Feb 14 11:10:34 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Feb 14 11:44:48 2017 -0800"
      },
      "message": "ART: Add operator \u003d\u003d and !\u003d with nullptr to Handle\n\nGet it in line with ObjPtr and prettify our code.\n\nTest: m\nChange-Id: I1322e2a9bc7a85d7f2441034a19bf4d807b81a0e\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": "5812e20ff7cbc8efa0b8d7486ada2f58840a6ad5",
      "tree": "be0e9fdeb90bcbad76b17b3aae4e746d977d80ee",
      "parents": [
        "518f373324f355f8e58440dfbc3f5a1f2244bde7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Feb 13 18:32:04 2017 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Feb 13 19:34:54 2017 -0800"
      },
      "message": "Revert^3 \"Hash-based dex cache type array.\"\n\nAssert failing for \"earchbox:search\":\nF zygote64: class_linker.cc:4612] Check failed: handle_scope_iface.Get() !\u003d nullptr\n\nTest: m test-art-host\nBug: 34839984\nBug: 30627598\nBug: 34659969\n\nThis reverts commit 85c0f2ac03417f5125bc2ff1dab8109859c67d5c.\n\nChange-Id: I39846c20295af5875b0f945be7035c73ded23135\n"
    },
    {
      "commit": "85c0f2ac03417f5125bc2ff1dab8109859c67d5c",
      "tree": "844952d237e35faa5c5a2357ab037366c8397115",
      "parents": [
        "8d4b1189639f0d8982bde681ccbdd7c03fe6ddbf"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 02 16:42:38 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 10 11:23:11 2017 +0000"
      },
      "message": "Revert^2 \"Hash-based dex cache type array.\"\n\nThe reason for the revert was fixed by\n    https://android-review.googlesource.com/332666 .\nWe now enable clearing dex cache types in test 155 from that\nCL. Also avoid an unnecessary store in LookupResolvedTypes()\nand prevent verifier from messing up the dex cache types.\n\nTest: m test-art-host\nBug: 34839984\nBug: 30627598\nBug: 34659969\n\nThis reverts commit d16363a93053de0f32252c7897d839a46aff14ae.\n\nChange-Id: Ie8603cfa772e78e648d005b0b6eae59062ae729d\n"
    },
    {
      "commit": "cd556b003adbb53739d4b3f43135e6a0ae69509a",
      "tree": "a30c9f03071d87e1f75a0d0b8c2961d113ea767d",
      "parents": [
        "357dcb73934356239292c46d6fbedba734da5e00"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 03 11:47:34 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 09 10:10:29 2017 +0000"
      },
      "message": "Fix dex cache resolved types and class table mismatch.\n\nRecord class table in ClassLinker::DexCacheData and use\nit in DexCache.setResolvedType() to store the type also\nin the initiating loader\u0027s class table if the dex file\nhas been registered.\n\nAlso throw InternalError when trying to register the\nsame DexFile with multiple class loaders. (Different\nDexFile instances referencing the same file are OK.)\n\nTest: 155-java-set-resolved-type\nTest: m test-art-host\nBug: 30627598\nBug: 34193123\nBug: 34839984\nChange-Id: Ia48acb300337c45880ea1459d2d32789546d67f4\n"
    },
    {
      "commit": "d16363a93053de0f32252c7897d839a46aff14ae",
      "tree": "8823c6dd4641eae333aa7001203460757a515010",
      "parents": [
        "ac240396125911b52437a460a400c8b38be43a96"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 01 14:09:13 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 01 15:27:37 2017 +0000"
      },
      "message": "Revert \"Hash-based dex cache type array.\"\n\nReverting to work around some programs crashing with\n    Check failed: handle_scope_iface.Get() !\u003d nullptr.\nthough the reason for the failure not yet understood.\n\nTest: m test-art-host\nBug: 34839984\nBug: 30627598\nBug: 34659969\nBug: 30419309\n\nThis reverts commit ec7862283dd49f5a58d0ac45960ce27c2f7671b8.\n\nChange-Id: Ifded663633082f1e59e5b6ff2e026dc559bd6b82\n"
    },
    {
      "commit": "ec7862283dd49f5a58d0ac45960ce27c2f7671b8",
      "tree": "26d6dcc1d5ed4f0ba5ac15f17ef7377215684bf6",
      "parents": [
        "c01d49091f4588777db5bf45345f388058caa99f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 20 16:24:13 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jan 30 10:21:16 2017 +0000"
      },
      "message": "Hash-based dex cache type array.\n\nTest: m test-art-host (Interpreter, Optimizing, JIT)\nTest: m test-art-target on Nexus 6P (Interpreter, Optimizing, JIT)\nTest: Nexus 6P boots\nTest: m valgrind-test-art-host\nBug: 30627598\nBug: 34659969\nBug: 30419309\nChange-Id: Ic00eda89e58088a3573fc9ec0ad04c0e69e161d1\n"
    },
    {
      "commit": "bd2fed5a813b68fa42fe941b07325ba4ff3190b0",
      "tree": "2e8ce7221f842133a1b7b8e6fc4793acbf4ed8f6",
      "parents": [
        "ca21dc47adeed92a15a9d3fd090bdd0e6654679c"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Jan 25 10:46:54 2017 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Jan 27 13:47:50 2017 +0000"
      },
      "message": "MethodHandles: Support and tests for revealDirect / reflectAs.\n\nWe need runtime support to materialize a Constructor, Field or\nMethod object from a MethodHandle and its associated ArtField\nor ArtMethod pointer.\n\nAn alternate approach might be to have all handles hold a reference\nto their associated Field or Method object (in addition to the\nraw ArtField or ArtMethod) but that seems unnecessary given that\nthese APIs are not expected to be called often.\n\nTest: test-art-host\n\nChange-Id: I9450706b9c30359edebf2e8a7afbc8d89bd68b26\n"
    },
    {
      "commit": "8116003cc9dd1e74fac1682eec547b8bb0afb061",
      "tree": "08958e46edf93d7e13578d5b0362b8839b28d6dd",
      "parents": [
        "931cf54cce1212ee314741d14f9b9008ab593872",
        "c5889ce65ef7d31d4f0fe7be8f7f7f45948c5b5b"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Jan 25 10:45:30 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 25 10:45:31 2017 +0000"
      },
      "message": "Merge \"MethodHandles: Support and tests for invokeWithArguments.\""
    },
    {
      "commit": "c5889ce65ef7d31d4f0fe7be8f7f7f45948c5b5b",
      "tree": "5ae5f194ed3f8aa8eb6cec23f3262d5c2b3807fa",
      "parents": [
        "d8981ee26340c46b608fdff2cdf294b2f7d4afce"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Jan 19 20:42:23 2017 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jan 24 17:15:01 2017 +0000"
      },
      "message": "MethodHandles: Support and tests for invokeWithArguments.\n\nTracks libcore change a8cf0bffdb9e9cf031efd0d3c8b5645d45963562.\n\nTest: make test-art-host\nChange-Id: I65fbf3a82b629585324c477bdce6dabd63ae408e\n"
    },
    {
      "commit": "72ab684871f870aead76b23cb67deb046107b380",
      "tree": "d4bb40cab65df449246b35ae582234238676b7bb",
      "parents": [
        "e36c51aee58e61e9fc89851b767379c587f050e3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jan 20 19:32:50 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jan 24 12:05:02 2017 +0000"
      },
      "message": "Add class status for resolved erroneous classes.\n\nSplit the old ambiguous status mirror::Class::kStatusError\ninto kStatusErrorUnresolved and kStatusErrorResolved. Once\na class has been resolved, IsResolved() shall return true\neven if the class later becomes erroneous. Allow returning\nerroneous class from ClassLinker::EnsureResolved() if it has\nbeen previously resolved. This allows consistent behavior\nfor retrieving classes, immune to multi-threaded races and\nmulti-dex weirdness. It also allows JVMTI to properly report\n\"prepared\" (i.e. resolved) classes that are also erroneous.\n\nThe new behavior is consistent with the RI.\n\nAdd regression tests to 008-exceptions for inconsistent\nbehavior for multi-dex retrieval of erroneous resolved class\n(wrapping or not wrapping the old exception based on which\ndex file is used for lookup) and for a CHECK(IsResolved())\ncrash in ClassLinker::LoadSuperAndInterfaces() (without any\ntests for similar checks that could have previously failed\nonly due to extremely unlikely race conditions; these should\nnow also be fixed).\n\nInconsistency still remains for class verification as shown\nby the new exceptionsForSuperClassInitFailure() test in\n008-exceptions, where interpreter and Optimizing still\ncause different exceptions to be thrown.\n\nNote: This is partially changing behavior implemented for\nbug 28787733. Since we allow the class loader to retrieve an\nerroneous resolved class, the ExceptionInInitializerError is\nnot thrown at all from VMClassLoader_findLoadedClass(), so\nthere is nothing to wrap in ClassNotFoundException.\n\nTest: m test-art-host\nBug: 30627598\nBug: 28787733\nChange-Id: I86cdca00f35a0d6221d2559e3026ac0428a3613c\n"
    },
    {
      "commit": "5e8d5f01b0fe87a6c649bd3a9f1534228b93423d",
      "tree": "a1441acc0021d170f412542ae2a1ae62794e7846",
      "parents": [
        "b0dde4397fa5b0756312b46bd18477a2c1f6a7da"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Oct 18 18:03:43 2016 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jan 23 15:50:01 2017 +0000"
      },
      "message": "Fix some typos in ART.\n\nTest: m build-art-host\nTest: m cpplint-art\nChange-Id: Ifc6ce3d0d645c4a8dca72dd483fc03fc05077130\n"
    },
    {
      "commit": "b0dde4397fa5b0756312b46bd18477a2c1f6a7da",
      "tree": "6a76cc50a8b2746aefaaefe5c8e1c6eee3d3d7a8",
      "parents": [
        "17aba3529161ddd6f351608da383fdedb985ba44",
        "6ad2f6d0e17b8cd1fd20aeb1958196e856475e80"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jan 23 15:08:01 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jan 23 15:08:02 2017 +0000"
      },
      "message": "Merge \"Fix inserting classes to initiating loader\u0027s class table.\""
    },
    {
      "commit": "a7e38d8aaacfca85b40b5df654f85c0979968672",
      "tree": "34322c79fc328a608fc17303453c8ec1f38b9eaa",
      "parents": [
        "05778764cb11162b6f3ff72386135ed45a07af33"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jan 19 14:57:28 2017 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jan 20 11:32:03 2017 -0800"
      },
      "message": "Use original dex file for retransformation.\n\nThe spec requires us to pass the dex file as it appeared before any\nretransformation-capable agents had modified it to the\nClassFileLoadHooks when RetransformClasses is called. We do this by\nsaving the initial dex file bytes into the class as a byte[].\n\nBug: 32369916\nTest: mma -j40 test-art-host\n\nChange-Id: Ic6af3738cd2a831e91ba1144f502fa58b3c333e4\n"
    },
    {
      "commit": "6ad2f6d0e17b8cd1fd20aeb1958196e856475e80",
      "tree": "ceb67cae125206390513b660a785500c01cce4db",
      "parents": [
        "a8b4390a3b817a455b0abdf575922fea6182170d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jan 18 15:22:59 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jan 20 17:29:39 2017 +0000"
      },
      "message": "Fix inserting classes to initiating loader\u0027s class table.\n\nFix two cases that were missed in\n    https://android-review.googlesource.com/312285\n\nFirst, copy all class references to app image class table,\nincluding boot image classes where the class loader used for\nAOT is only the initiating loader, not the defining loader.\n\nSecond, add array classes to the initiating loader\u0027s class\ntable.\n\nWithout these fixes, ClassLinker::LookupResolvedType() was\nactually relying on the type being in the dex cache because\nin some cases the slow path would not be able to find it.\n\nAdd a test for ClassLinker::LookupResolvedType() with an\narray type and fix that function to avoid null pointer\ndereference.\n\nTest: m test-art-host\nBug: 30627598\nChange-Id: I7cb14788700e6a22d16c364f8a35e2b6b3d954e4\n"
    },
    {
      "commit": "9cd522b50a5f0209e97a2e6bcf8c9c350d3f3f83",
      "tree": "503af07a0a6122d161a81dfed2d2e64f8e501d5a",
      "parents": [
        "c3b7bf3bcc55ec3c684210176ff6ddeb9d33ac19"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 18 17:05:59 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 18 17:08:57 2017 +0000"
      },
      "message": "Remove now unused dex_cache_resolved_types_ from ArtMethod.\n\nTest: test-art-host test-art-target\nChange-Id: I004c040da165934f74eb8b8e85e99e7c6621c2df\n"
    },
    {
      "commit": "9320675cb21a53b3dd59d80d440a96e04c84f28d",
      "tree": "4ed1f60e2d0a39a554e1f7b38d0adbf7beb8282b",
      "parents": [
        "8bd59a0fd46db83616785168231e09fb95ed2ead"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jan 17 13:20:55 2017 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jan 17 17:05:12 2017 +0000"
      },
      "message": "MethodHandles: Remove experimental flag.\n\nRuntime::IsMethodHandlesEnabled now always returns true.\nThis change also removes the (now unnecessary) run scripts\nfor method handle tests.\n\nNote that the --experimental\u003dmethod-handles flag is left in\nplace for the test build steps (etc/default-build) because it\u0027s still a\nconvenient way to supply arguments to jack / smali.\n\nTest: make test-art-host\n\nChange-Id: I8475c7b8ac2615ac382a06ce54be39dce3cc7713\n"
    },
    {
      "commit": "9748d3d2094c1d3c443a350cf12b9d77b4c4d1e3",
      "tree": "d247230d6f5d07f659792a67214e7386e96e0b79",
      "parents": [
        "e9e43e93a7519a971359fc1d3e418ad37e637c82",
        "b79bbd817317bfec60de7957d405a7de0d9e75c1"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Tue Jan 17 10:24:03 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jan 17 10:24:04 2017 +0000"
      },
      "message": "Merge \"MethodHandles: Implement invoker / exactInvoker.\""
    },
    {
      "commit": "5d37c152f21a0807459c6f53bc25e2d84f56d259",
      "tree": "7d8cbce0a55f258150a047def70244f79afc866d",
      "parents": [
        "aa89a4c6fca095904521842c018399f1e3501a45"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 12 13:25:19 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jan 16 22:56:56 2017 +0000"
      },
      "message": "Put inlined ArtMethod pointer in stack maps.\n\nCurrently done for JIT. Can be extended for AOT and inlined boot\nimage methods.\n\nAlso refactor the lookup of a inlined method at runtime to not\nrely on the dex cache, but look at the class loader tables.\n\nbug: 30933338\ntest: test-art-host, test-art-target\nChange-Id: I58bd4d763b82ab8ca3023742835ac388671d1794\n"
    },
    {
      "commit": "b79bbd817317bfec60de7957d405a7de0d9e75c1",
      "tree": "afe0f4002b97b08b82c8e4e4ce1540a0f26025be",
      "parents": [
        "4cddd03950bb21e950afd72cad87e963bc53ea10"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Jan 16 17:48:28 2017 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Mon Jan 16 17:48:28 2017 +0000"
      },
      "message": "MethodHandles: Implement invoker / exactInvoker.\n\nAccompanies libcore commit 0a72753297b45d08ca33cf7e87888f5fee87f69e.\n\n- Adds callsiteType field to mirror::EmulatedStackFrame.\n- Adds unit tests for MethodHandles.invoker /\n  MethodHandles.exactInvoker.\n\nTest: art/test/run-test --host 957\nChange-Id: Ia27742c80de560a5b38f792bfa97664678cec8ae\n"
    },
    {
      "commit": "913e6e6f36f6feb1d11e7c095dbbc9cea7ab01be",
      "tree": "d1e74a07e3b801ff81eaefe5569a1262cc922976",
      "parents": [
        "4c1667fd521f6e11367fd262f9bd6474f48fb3e7",
        "f9bf250cc642c4e3e0c6904550fe922d3359a737"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Dec 16 09:32:22 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 16 09:32:23 2016 +0000"
      },
      "message": "Merge \"Remove dex cache string from mirror::Class.\""
    },
    {
      "commit": "1e4841e9fc77e34acb1823ad0f98a4828f2f2fb1",
      "tree": "ef632a2ba72def6d5dbc01592a0d1d8411e021f5",
      "parents": [
        "9538f9e2a5d03f1b1bc07ebfbd93b61dcf8ad604"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Dec 15 14:21:04 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Dec 15 14:34:25 2016 -0800"
      },
      "message": "Fill in empty iftable early\n\nPreviously it would not get filled in and remain null for some\nerroneous classes. This caused crashes for things like\nGetIfTableCount.\n\nAdded regression test (sample failure):\nclass_linker_test F 12-15 14:20:09 28771 28771 class-inl.h:532] Check failed: ret !\u003d nullptr java.lang.Class\u003cErroneous\u003e\n\nBug: 33650297\nBug: 33642884\n\nTest: test-art-host\n\nChange-Id: I506210bad17d6d2c58ca7870165f8a4a514f64fe\n"
    },
    {
      "commit": "f9bf250cc642c4e3e0c6904550fe922d3359a737",
      "tree": "953351c7e13b45e9246625ad81bce708788d96f9",
      "parents": [
        "b73e659be3fb6474ff3a993cd25ecbfa1cc4715c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 14 14:59:04 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Dec 15 14:52:22 2016 +0000"
      },
      "message": "Remove dex cache string from mirror::Class.\n\nThe compiled code does not need it anymore.\n\nTest: test-art-host test-art-target\nChange-Id: I71c08ce12d450ab2b2cd018330d42a8b8c9e3da2\n"
    },
    {
      "commit": "9186ced255f2e7402646b5b286deebb540640734",
      "tree": "833c25fd3bbb47749265947705b4fc0f0c1ba796",
      "parents": [
        "aa2657d6d9dda2e44c6452e5f5901db78ef9b3cc"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Dec 12 14:28:21 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Dec 13 11:43:48 2016 -0800"
      },
      "message": "ART: Clean up utils.h\n\nRemove functionality provided by libbase. Move some single-use\nfunctions to their respective users.\n\nTest: m test-art-host\nChange-Id: I75594035fa975200d638cc29bb9f31bc6e6cb29f\n"
    },
    {
      "commit": "19a4d374738da4dc668a078f92dbe887ff9f00d9",
      "tree": "a210638e93d80cf0a297de07f4c9cdc60784ce50",
      "parents": [
        "aea9ffece7eb32f3884a4ad0553e1df4d90fd9e4"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Dec 08 14:41:46 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 09 13:30:00 2016 +0000"
      },
      "message": "Clean up Class::GetDirectInterface().\n\nOnce the `klass` has been resolved, this function should not\nneed to resolve interface types anymore. Drop the type\nresolution from this function and pass the Class as ObjPtr\u003c\u003e\ninstead of Handle\u003c\u003e. Make callers that expect non-null\nresult DCHECK() that assumption. For the callers that may\nactually need to resolve these interface classes, introduce\na new function ResolveDirectInterface().\n\nAlso improve ObjPtr\u003c\u003e constructors and assignment operator\nto improve overload resolution. For example, if we have\nfoo(ObjPtr\u003cT1\u003e) and foo(ObjPtr\u003cT2\u003e), calling foo(.) with\na T1* would have previously been ambiguous even if T1 is\nnot a base of T2.\n\nTest: m test-art-host\nChange-Id: Iff44a7285f68f0af4507fc9ba37343865422fe84\n"
    },
    {
      "commit": "cc1b5357f83f0b787d51fbfde3fe870c8a2fa050",
      "tree": "253d23dba63e1003dc8e953002b994d01c97f181",
      "parents": [
        "5d0c3009fc56afdb4aeae5ee6dd98c3d1d2e7711"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 01 16:58:38 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Dec 02 14:00:22 2016 -0800"
      },
      "message": "ART: Clean up ClassLinker\n\nTry to clean up and simplify ClassLinker.\n\nMove dex_lock to Locks. Remove dead code. Move single-use\ncode to user. Hide implementation details from header.\n\nTest: m test-art-host\nChange-Id: I58150fa9c2a9524f8304370270c2197d655cb3a8\n"
    },
    {
      "commit": "a01de59eef990c07df9815376cd3c675e3acd481",
      "tree": "86f6ef41c13de572dc134956c836dd94c35d9d64",
      "parents": [
        "424c03aac25835febbf5c695b943206bc40ef335"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 15 10:43:06 2016 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 30 10:23:47 2016 -0800"
      },
      "message": "Infrastructure for obsolete methods\n\nThis adds some of the structures and functions needed to eventually\nsupport obsolete methods. Specifically this adds the code to create\nand iterate through the obsolete dex-cache maps of classes and\nre-organizes the redefinition code to be more sensible and extensible.\n\nBug: 32369913\nTest: ./test/run-test --host 902\nTest: mma -j40 test-art-host\n\nChange-Id: I93d60fa66e7512e8b059cdf42af8a56e93ef4bd7\n"
    }
  ],
  "next": "a5b09a67034e57a6e10231dd4bd92f4cb50b824c"
}
