)]}'
{
  "log": [
    {
      "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": "2bff9ca67a3e945f7c2ca7e8a075e2d91637b01b",
      "tree": "8ee2735745df6eb35367893d72bee9379d94fcee",
      "parents": [
        "0c18338ebae6b3597c882887f8354b64abb5e90f"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jul 14 17:54:11 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 18 00:09:02 2017 -0700"
      },
      "message": "ART: Remove more object_callbacks.h includes\n\nTest: m\nChange-Id: I01b45c86c37d952b15028f2177246611f02da887\n"
    },
    {
      "commit": "0cb172874481f736c6b7c491dd621166cc25561b",
      "tree": "2408750b6e08c686b89cee5df0ddae736a775092",
      "parents": [
        "890045e5a768257d8def42827a09a516ebe3e07e"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Jul 12 14:51:49 2017 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon Jul 17 14:09:56 2017 -0700"
      },
      "message": "Do superclass validation at compile time and log with new class status.\n\nTries to perform superclass validation for classes that are resolved,\nbut not initialized at runtime. If successful, saves the result in the\noat file with a new class status. At runtime, the superclass validation\ncan be skipped during class initialization, saving some time and\nreducing string accesses.\n\nResults show savings of 50kB PSS in maps on startup, with slight\ndecrease in startup time.\n\nMaps (average of 100 runs)\nBefore: dex 9941.3 odex 15159.8 total 25101.1 launch 908\nAfter: dex 9897.4 odex 15155.7 total 25053.1 launch 906.6\n\nBug: 63456114\nTest: mm test-art-host\nChange-Id: If67a4a49d61781b6d561c26118d7e0c6b9cc0d6f\n"
    },
    {
      "commit": "f8db2c3945e746fcbf307832ac2f7826d5ec178a",
      "tree": "fc579f67f17b2ccbb218889f2484ef6f5013da1c",
      "parents": [
        "c5515fd96887f70101640fddf9a3189ff936c08b"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jul 07 20:07:12 2017 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jul 14 13:04:30 2017 +0100"
      },
      "message": "ART: Add support for constructor method handles\n\nAdd well known methods for MethodHandles.lookup() and\nMethodHandles.Lookup.findConstructor(). These are used to call the\nJava code that create a constructor transform.\n\nSeparate method handle resolution paths for fields and methods in the\nclass linker.\n\nUpdate test 952-invoke-custom-kinds to include a constructor method\nhandle. The test classes now match dx/tests/135-invoke-custom.\n\nBug: 62774190\nTest: Update 952-invoke-custom-kinds\nChange-Id: I9a007254a856422c24397c4df3ef3dfbf6bdd840\n"
    },
    {
      "commit": "a44c44549c8688b0e7257571601625e9eb88cea8",
      "tree": "994f1496175b29559f2a06c1bc125d7af809300a",
      "parents": [
        "f6a122c2cdbd871c0073ee5f90449be4fad34dea"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 13 18:49:35 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 13 18:49:35 2017 +0100"
      },
      "message": "Fix compressible string check for ctors with `hibyte`.\n\nOnly the low 8 bits of the `hibyte` are relevant but we\nwere checking the whole `hibyte`, erroneously creating\nan uncompressed string when the low bits are zero but\nhigh bits are non-zero. String.equals() depends on all\ncompressible Strings being actually compressed.\n\nTest: Added regression test to 021-string2.\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nBug: 31040547\nBug: 63661357\nChange-Id: I31690b544de928ce9c6f39f3d144d3e2029f38f6\n"
    },
    {
      "commit": "6d3e76884710e639e79a46d505395bc83ad5ec7d",
      "tree": "3b51520701c740ccb69ce38483c47c25105dd40b",
      "parents": [
        "00cca3a275562d110a8b35094b9b12fac37f67ab"
      ],
      "author": {
        "name": "Chang Xing",
        "email": "chxing@google.com",
        "time": "Tue Jul 11 10:31:29 2017 -0700"
      },
      "committer": {
        "name": "Chang Xing",
        "email": "chxing@google.com",
        "time": "Tue Jul 11 17:05:12 2017 -0700"
      },
      "message": "Abstract SetField functions with Transaction check\n\nAbstracted several functions which set objects\u0027 fields with a check to\ntest whether transaction is active to determine one template argument,\nthis make more object modification operations support transaction.\n\nReplaced some function calls with transaction checking version to\nsupport clinit for app image to run under transaction.\n\nTests shows not breaking anything, testcase cover this situation will be\nadded shortly.\n\nTest: make test-art-host -j64\nChange-Id: Ic15a4428a7c7cce6832651e1894eb760354de009\n"
    },
    {
      "commit": "f79aa7fc107c661e5a6d6ffd2a33221864fa1fa3",
      "tree": "07bf40e8b5d75454ffe52e82f4d4e5300386fe37",
      "parents": [
        "4a77b1e96733be419c0cb571448e8590c803bd91"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 04 16:58:55 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 05 16:32:24 2017 +0100"
      },
      "message": "Small refactoring of field/method access checks.\n\nAnd some cleanup to reduce the size of the upcoming\nmethod resolution rewrite CL.\n\nTest: m test-art-host\nTest: testrunner.py --host\nTest: testrunner.py --host --interp-ac\nBug: 62855082\nChange-Id: I5bbf0a92d75fe9de6982b80280cd5877fcc37700\n"
    },
    {
      "commit": "aebfd208a5ca46833a110dfa392a0298b0347917",
      "tree": "fb80596b3e68d8b38e1a308027ce65f7dfa7c332",
      "parents": [
        "718ec6e04614a844e6383df95137629fb0698f5c",
        "9ac7749591c4341f5bf7d17af59d3aa6366487f1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 15 15:13:15 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jun 15 15:13:15 2017 +0000"
      },
      "message": "Merge \"Clean up ArraySlice\u003c\u003e.\""
    },
    {
      "commit": "9ac7749591c4341f5bf7d17af59d3aa6366487f1",
      "tree": "509126cecfa61b338c6c13d554f9583b1e99cf36",
      "parents": [
        "e1993c7d74fc60c468f55da78da490a5ce9c2f91"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 14 18:07:03 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 15 10:11:26 2017 +0100"
      },
      "message": "Clean up ArraySlice\u003c\u003e.\n\nRemove constructors that take ranges (one of them created\nambiguity with the constructor taking just the length) and\nadd SubArray() to serve as a replacement API.\n\nRemove the AsRange() function as the translation to the\nIterationRange\u003c\u003e seems totally unnecessary, we can simply\nreturn ArraySlice\u003c\u003e from the functions that used it.\n\nRemove the At() function as the comparison with the\nstd::vector\u003c\u003e::at() is confusing given that we do not\nuse C++ exceptions.\n\nAdd some standard container API, i.e. nested types and\nmore functions.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nChange-Id: Ifcd39222cf8f36b7ebf8029398ed7fc67aafcaf0\n"
    },
    {
      "commit": "b2d18fa4e33ca119654ced872c70fe198b0b2db5",
      "tree": "9f0e3ac72b9b7b08794e1ecf458620ba19437465",
      "parents": [
        "58794c5c23f46a7476a58e5a10dbeebb6321aa90"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jun 06 20:46:10 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 09 11:36:45 2017 -0700"
      },
      "message": "ART: Clean up asm_support.h\n\nThe includes are only ever really needed for tests. Factor out\ngeneration of the test function into asm_support_check.h\n\nFix up missing includes, mainly intern_table.h.\n\nTest: m\nTest: m test-art-host\nChange-Id: I435199e6211e368be0a06c80d8fa95b9593aca31\n"
    },
    {
      "commit": "58794c5c23f46a7476a58e5a10dbeebb6321aa90",
      "tree": "948368dd8d8376a50fe996da0438abe10da1322d",
      "parents": [
        "73321bfdd7e96e3ce62042c9e5be567ed0db1985",
        "5678db5b3a0275d04bc610236f89fac9f76b5b1e"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jun 09 18:00:41 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 09 18:00:43 2017 +0000"
      },
      "message": "Merge \"ART: Refactor bit_utils and stl_util\""
    },
    {
      "commit": "2722f380d6430be83a1c899a94999690a8ab26df",
      "tree": "1ce8a54c47aefbb35a4cb18c3d3bbedcbfac9734",
      "parents": [
        "d632b8b8a031cda163c6f9a6b4e33a192f123a0b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 08 18:03:25 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 09 08:45:13 2017 -0700"
      },
      "message": "ART: Fix old warnings\n\nFix Wundefined-var-template warnings.\n\nPartially reverts commit df53be273509dd43725870fb20a2c7d71f7fbfd3.\n\nBug: 28149048\nBug: 29823425\nTest: m\nTest: m test-art-host\nChange-Id: Ib077312558f9e2f784859861c000fbac8375b3f5\n"
    },
    {
      "commit": "5678db5b3a0275d04bc610236f89fac9f76b5b1e",
      "tree": "efc4ffe5d59a0c6c5f4c15a886459962d24de4aa",
      "parents": [
        "83b140474aa1759739c8ee4464bf226c4fa0f6d7"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 08 14:11:18 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 08 14:11:18 2017 -0700"
      },
      "message": "ART: Refactor bit_utils and stl_util\n\nMove iterator code from bit_utils.h into bit_utils_iterator.h. Move\nIdentity into stl_util_identity.h. Remove now unnecessary includes,\nand fix up transitive users.\n\nTest: m\nChange-Id: Id1ce9cda66827c5d00584f39ed310b6b37629906\n"
    },
    {
      "commit": "3b7dc35f4e5c4d86c73b6784b7ee0df701c68ec2",
      "tree": "1e3a56846ec63148142ac6fb1fef214129f4a05e",
      "parents": [
        "8228cdf4ad6322ec8133564aaa51f966d36c0f17"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jun 06 20:02:03 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 08 13:13:20 2017 -0700"
      },
      "message": "ART: Clean up allocator.h\n\nMove the single-use typedefs to their users. Remove now-unused\nincludes. Fix up transitive includes.\n\nTest: m\nChange-Id: I953d774b28f1e4f3191f96943e3a69ce66aa398a\n"
    },
    {
      "commit": "508fdf3eb53824f109c89f98484927085bdc43ba",
      "tree": "4ed08886adc50962b7fd46936923e29057e2fdb2",
      "parents": [
        "2ff3b97500b717f69415ae474d5cfb1613cd15ee"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 05 16:42:13 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 05 20:28:21 2017 -0700"
      },
      "message": "ART: Small class-inl.h cleanup\n\nRemove unnecessary class_linker-inl.h include, and fix up all\ntransitives (mainly gc_root-inl.h). Also clean up reference.h.\n\nTest: m test-art-host\nChange-Id: I47bd6edcfe4a23821e37a6e6fa8cca91d0d2d226\n"
    },
    {
      "commit": "2ff3b97500b717f69415ae474d5cfb1613cd15ee",
      "tree": "a6bd76eeda26ad85173e23a14f69ec8ed3440570",
      "parents": [
        "5d08fcc21a14190c4dba3028a3e35d281afdd016"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 05 18:14:53 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 05 20:28:20 2017 -0700"
      },
      "message": "ART: More header cleanups\n\nClean up some more includes. Move some -inls from object-inl to\nobject-refvisitor-inl. Fix up transitives.\n\nTest: m test-art-host\nChange-Id: I0e3e268d95a1c71b0a80fc963d13d191a97b2283\n"
    },
    {
      "commit": "5d08fcc21a14190c4dba3028a3e35d281afdd016",
      "tree": "c42de65ced190778342d9b022e400f4a7f9d346b",
      "parents": [
        "57cf00bde719ddc84a6015b107b90a20169e3099"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 05 17:56:46 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 05 20:28:16 2017 -0700"
      },
      "message": "ART: More header cleanups\n\nPull out more dependencies through forward declarations.\n\nTest: m test-art-host\nChange-Id: I7d86726928937f788b956ec9eac91532d66d57ae\n"
    },
    {
      "commit": "57cf00bde719ddc84a6015b107b90a20169e3099",
      "tree": "1522952470490e6b107d07649f511ef09f9abd32",
      "parents": [
        "40c6710dfa0d10d34dcca8ed92c214faba36c833"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 05 17:15:32 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 05 18:29:04 2017 -0700"
      },
      "message": "ART: Remove old object_callbacks.h includes\n\nRemove unused includes.\n\nTest: m\nChange-Id: I70c227d32c6900904e186b975d1f2131b718d93d\n"
    },
    {
      "commit": "6559ba1cfb9d24fdca4b1b1ec9e0b8dc31679982",
      "tree": "6f5bc4efc05b500e1c0c2af3f54310acd7255419",
      "parents": [
        "9f7e91ca8144383ba04405eef42dcc19768825a6",
        "fdd513d6c522841e82f1dc144d19a8d60269b9f7"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jun 02 18:18:10 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 02 18:18:12 2017 +0000"
      },
      "message": "Merge \"Move to release CAS for updating object fields\""
    },
    {
      "commit": "fdd513d6c522841e82f1dc144d19a8d60269b9f7",
      "tree": "1ffbfd68c1271d158de32e1aa438906d3553256d",
      "parents": [
        "1656ca9e6996cb555b4463e5efd4bd7e3f4fb816"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jun 01 11:26:50 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 02 09:38:14 2017 -0700"
      },
      "message": "Move to release CAS for updating object fields\n\nRelaxed cas is not sufficient to make sure threads that read the\nfield will see the copied contents of objects.\n\nBug: 37187694\nBug: 62240510\n\nTest: test-art-host\n\n(cherry picked from commit a1f20c3f8d0dabb9723acccf3ba760acf3ebe62d)\n\nChange-Id: I8bff8a67c2c52eb131714b52e6d842c8c08dd70a\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": "d482e73fe26cb9161511a80e3db39e08b9808ab6",
      "tree": "0b8c874f24c211e4e3d87083f8017580aa23ff63",
      "parents": [
        "a14100ccf51cc63a5c472188d1e2d337627e49eb"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Apr 24 17:59:09 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 30 16:26:35 2017 -0700"
      },
      "message": "ART: More header cleanup - runtime.h\n\nRemove unnecessary runtime.h includes. Refactor other headers\n(move to forward declarations) to make this possible.\n\nTest: mmma art\nChange-Id: I297f0ad444ba92169edd16d8c7cbe95bb6dbb800\n"
    },
    {
      "commit": "01f7743b1e97e0b14ec8cb0d557dbb02c5b42a04",
      "tree": "bbd196663c760198a461acbad19966ac7776c075",
      "parents": [
        "0abc6bbde21e7b9d9104e8698946814649e51261"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 24 09:56:30 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 24 20:55:02 2017 -0700"
      },
      "message": "ART: Fix some pedantic warnings\n\nRemove dynamically-sized array locals. Add macro parameters for vararg\nmacro. Replace typeof with decltype.\n\nBug: 17719863\nTest: m test-art-host\nChange-Id: Ife09dbb1c0cb39d3ed4bdaec39389511d4e2032d\n"
    },
    {
      "commit": "6680e3394aeb2b89300e459dc4dacfbac4c5847e",
      "tree": "2607b62bc36f4229ed6db9a214e5889a2baa1574",
      "parents": [
        "c3c743a8e9bd0321b9ae82bd450846d526807aec"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Apr 24 16:27:43 2017 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Apr 24 20:14:47 2017 +0100"
      },
      "message": "Handle classes with a huge number of direct methods.\n\nMake sure that fields Class::copied_methods_offset_ and\nClass::virtual_method_offset_ are correctly interpreted as unsigned\n16-bit integers.\n\nTest: art/test/testrunner/testrunner.py -j4 -t 648-many-direct-methods\nBug: 33650497\nChange-Id: I63e97d5b7e08d58252ff4831b63c4035ecc55979\n"
    },
    {
      "commit": "c15a2f4f45661a7f5f542e406282c146ea1a968d",
      "tree": "50ad6104b0b8739f272782c35a7022cca64d2601",
      "parents": [
        "9ae527f615f61aec4aaca310c52f373e8c3d8d58"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 21 12:09:39 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 21 16:48:00 2017 -0700"
      },
      "message": "ART: Add object-readbarrier-inl.h\n\nMove some read-barrier code into a new header. This prunes the\ninclude tree for the concurrent-copying collector. Clean up other\nrelated includes.\n\nTest: mmma art\nChange-Id: I40ce4e74f2e5d4c692529ffb4df933230b6fd73e\n"
    },
    {
      "commit": "a1d2f957a21319d1110bebb9a52f46fd1c67ffaf",
      "tree": "db9b6eda7cd4764e13c07256df14a7c14888ee75",
      "parents": [
        "c6ea7d00ad069a2736f603daa3d8eaa9a1f8ea11"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Apr 20 22:53:58 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 21 08:41:28 2017 -0700"
      },
      "message": "ART: Clean up art_field.h\n\nClean up the header. Fix up other headers including the -inl file,\nin an effort to prune the include graph. Fix broken transitive\nincludes by making includes explicit.\n\nTest: m\nChange-Id: I6ff2d6f89b741d8188e19426eccf4743fec688fc\n"
    },
    {
      "commit": "c6ea7d00ad069a2736f603daa3d8eaa9a1f8ea11",
      "tree": "a6d3332a8592fb806841314d55b206b573d37d86",
      "parents": [
        "d68677c5fde1ace16ea58d65733776c954e7acb4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Feb 01 16:46:28 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 21 08:40:33 2017 -0700"
      },
      "message": "ART: Clean up art_method.h\n\nClean up the header. Fix up other headers including the -inl file,\nin an effort to prune the include graph. Fix broken transitive\nincludes by making includes explicit. Introduce new -inl files\nfor method handles and reference visiting.\n\nTest: source build/envsetup.sh \u0026\u0026 lunch aosp_angler-userdebug \u0026\u0026 mmma art\nTest: source build/envsetup.sh \u0026\u0026 lunch aosp_mips64-userdebug \u0026\u0026 mmma art\nChange-Id: I8f60f1160c2a702fdf3598149dae38f6fa6bc851\n"
    },
    {
      "commit": "bc632f05acd06f9000e67517fdeb8296f739e079",
      "tree": "444d10061ec4556ee24fe175a410d4e720cec528",
      "parents": [
        "4c408ca7262122729fc9b1e53ad439507bd2ec19"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Apr 20 13:31:39 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Apr 20 13:44:38 2017 -0700"
      },
      "message": "Improve VerifyNoFromSpaceRefsObjectVisitor logging\n\nRemove read barriers in PrettyTypeOf to prevent recursive failures.\n\nPass down holder and offset information to\nVerifyNoFromSpaceRefsFieldVisitor.\n\nTest: test-art-host\nBug: 37531237\nChange-Id: I704ec18ebecfc1ca2982b38f67a2f0788e59dfe9\n"
    },
    {
      "commit": "d08f66f519f6cf75c2eb05a489b6e87f739badff",
      "tree": "aa00ac17e22021d9342f342c3d7635677be9b0f7",
      "parents": [
        "dbe35eddc4324468e08afc0829787f02ee736cea"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Apr 13 11:47:53 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Apr 13 14:18:45 2017 -0700"
      },
      "message": "Various debug ART GC performance improvements\n\nRemoved unnecessary read barriers in SizeOf and a few other places.\nDisabled disallow read barrier check.\n\nBefore:\nGC time: 15.817s\nReal 0m26.113s\nuser  1m16.780s\nsys 0m3.152s\n\nAfter:\nGC time: 9.212s\nreal  0m19.875s\nuser  1m9.916s\nsys 0m1.916s\n\nBug: 35644369\nTest: test-art-host\n\nChange-Id: I79a65259deff2a478a96e02ae69b14730b6dcbe6\n"
    },
    {
      "commit": "1e3926ae224c6418c6e1209bb134c28116a2c1fb",
      "tree": "dbd6a5611266133552841fba75a01b3541dfa6d8",
      "parents": [
        "672082ab6edf7c12a1d7b1d9303aa0aa4fcce089"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Apr 07 10:38:06 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Apr 07 14:52:13 2017 -0700"
      },
      "message": "Free unneeded obsolete maps\n\nIn cases where there are no new obsolete methods we can get rid of the\nobsolete maps arrays.\n\nBug: 31455788\n\nTest: ./test.py --host -j40\n\nChange-Id: I4a8cd96b4293439c6e67d9426011b92125cc7b03\n"
    },
    {
      "commit": "8c19d2431f45861ca11cf5ebc4fdaf10200f2458",
      "tree": "2d376ce322be680898d55fde929e67032d4c711c",
      "parents": [
        "4e03442619834c56dbf79a3493eb8a2d91b93e7f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Mar 06 12:35:10 2017 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Mar 29 16:51:26 2017 -0700"
      },
      "message": "Refactor image writer\n\nAim to have common functions for copying references and pointers.\nRequired for adding support for faster image fixups.\n\nTest: test-art-host -j32\n\nBug: 34927277\nBug: 34928633\nChange-Id: Ia654efc483b332eea3535570496bfeccd7c635ee\n"
    },
    {
      "commit": "1595815c2a914a78df7dfb6f0082f47d4e82bb36",
      "tree": "8fd53c3c91158b33e744e43cc655b2e2a180a3fc",
      "parents": [
        "4ba18fdfc2581a2328ab745c2707e3ed375d9e64"
      ],
      "author": {
        "name": "Alexey Frunze",
        "email": "Alexey.Frunze@imgtec.com",
        "time": "Thu Feb 09 19:08:30 2017 -0800"
      },
      "committer": {
        "name": "Alexey Frunze",
        "email": "Alexey.Frunze@imgtec.com",
        "time": "Tue Mar 28 23:35:34 2017 -0700"
      },
      "message": "MIPS: Implement read barriers.\n\nThis is the core functionality. Further improvements\nwill be done separately.\n\nThis also adds/moves memory barriers where they belong and\nremoves the UnsafeGetLongVolatile and UnsafePutLongVolatile\nMIPS32 intrinsics as they need to load/store a pair of\nregisters atomically, which is not supported directly by\nthe CPU.\n\nTest: booted MIPS32R2 in QEMU\nTest: test-art-target-run-test\nTest: booted MIPS64 (with 2nd arch MIPS32R6) in QEMU\nTest: \"testrunner.py --target --optimizing -j1\"\nTest: same MIPS64 boot/test with ART_READ_BARRIER_TYPE\u003dTABLELOOKUP\nTest: \"testrunner.py --target --optimizing --32 -j2\" on CI20\nTest: same CI20 test with ART_READ_BARRIER_TYPE\u003dTABLELOOKUP\n\nChange-Id: I0ff91525fefba3ec1cc019f50316478a888acced\n"
    },
    {
      "commit": "d9911eeca13f609c885e0f6a5ce81af9b6340bfa",
      "tree": "f850510643ee120dba140bf0bb3e1c1b9c9ce4db",
      "parents": [
        "46bfb7c047a590ac5c24b658f31c170631556bb6"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 27 13:27:24 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Mar 27 13:53:48 2017 -0700"
      },
      "message": "ART: Clean up field initialization\n\nAdd explicit field initialization to default value where necessary.\nAlso clean up interpreter intrinsics header.\n\nTest: m\nChange-Id: I7a850ac30dcccfb523a5569fb8400b9ac892c8e5\n"
    },
    {
      "commit": "7f56a7459f946731391452d152b060695783c87c",
      "tree": "6fe66a54a075069f28d33d3e1c92aaacd2c16098",
      "parents": [
        "5a2bb55f477225c9f263d890fa2102e24b4a22f9",
        "2f814aab42591b7b4093d79851d9d2920538a5ef"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Mar 27 09:35:04 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 27 09:35:05 2017 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Make original dex file be more deduplicated\"\"\""
    },
    {
      "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": "f25cc730ff70f085daf527f69a02fdee69aee16b",
      "tree": "2f36f61990add16e7519d8b93506d6049dd7764c",
      "parents": [
        "7591bdadf72a2fe155f937b8dc66f6249cedd014"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 16 16:18:15 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 23 15:25:27 2017 +0000"
      },
      "message": "Deterministic DexCache in heap images.\n\nPreload each slot in dex cache arrays with the candidate\nentry with the lowest index.\n\nAlso fix a discrepancy where we used to keep an ArtField*\nin the DexCache if we kept the declaring class rather than\nbased on the class referenced in the corresponding FieldId.\nThis can result in accessing a field through a FieldId with\nan unresolved class as demonstrated by the regression test.\n\nTest: 159-app-image-fields\nTest: testrunner.py --host\nBug: 30627598\nChange-Id: I34735047cb064ff462cd9859e86a61ddf8615ecd\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": "8f2b925473cfdc7650cef407102957befe0c6bb5",
      "tree": "4af3395adaf03cb4a60cd40e7b3ee4196645eb9e",
      "parents": [
        "de9b8d63ef548d56de9c9d4657a7b916050d81ad",
        "6b2dc3156a2140a5bfd9cbbf5d7dad332ab5f5bd"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Mar 17 09:05:55 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Mar 17 09:05:56 2017 +0000"
      },
      "message": "Merge \"ART: Get rid of most of java.lang.DexCache.\""
    },
    {
      "commit": "4f2e957b07c8b6e48bbd7593bb64f3c5214fa489",
      "tree": "efcfcaaa1efdc567449c406e7107da2e94c127c2",
      "parents": [
        "ed883a11b8cd7f3712bd30fca1e2b0fb641bff63"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Mar 16 13:13:31 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Mar 16 14:23:46 2017 -0700"
      },
      "message": "Ensure the GC visits Obsolete Methods\n\nWe were previously not visiting obsolete methods during GCs. This\ncould lead to the use of stale pointers.\n\nBug: 36335999\nTest: ./test/testrunner/testrunner.py --host --interp-ac --gcstress -j40\n\nChange-Id: I2b5c7c75b29f9037204a860501fcdb78104b5e7a\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": "4408ecbd7357a2d6ac5e1d25cfe178cc7b153884",
      "tree": "66f0750670a1d4aca33420e1f350a5831f62c10a",
      "parents": [
        "5736a2d0b6e921befbbf6f1d09248eff6a61af78",
        "32f53883993fbed5f08c1e13606e91acb3715d5d"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Mar 16 17:53:25 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 16 17:53:26 2017 +0000"
      },
      "message": "Merge \"Fix sign extension issues\""
    },
    {
      "commit": "e9cd81c14609fa9dae2125e96ec4d86ca959117f",
      "tree": "e261a0445fc6a8bbd1c21cda9c012b3392e606fe",
      "parents": [
        "a70b683cd796f7e5bb50d8d282f72c50c89af250",
        "9e57abacecc683f50dd6c9870a32ee075eaf86a8"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Mar 16 13:30:22 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Mar 16 13:30:24 2017 +0000"
      },
      "message": "Merge \"Fix String::DoReplace() using obsolete `this`.\""
    },
    {
      "commit": "9e57abacecc683f50dd6c9870a32ee075eaf86a8",
      "tree": "27ef93c87f3ce9f09414620f77b35f6d0949fb22",
      "parents": [
        "26ec3cad4968ae32ce9d04c3046f766df46d9bd7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 16 10:45:40 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 16 10:55:24 2017 +0000"
      },
      "message": "Fix String::DoReplace() using obsolete `this`.\n\nChange it to a static function taking a Handle\u003c\u003e.\n\nTest: testrunner.py --host --interp-ac --gcstress -t 021-string2\nBug: 36335996\nChange-Id: I5ab3e7adc59d6a9095290e57d5ce5d46b79f089b\n"
    },
    {
      "commit": "32f53883993fbed5f08c1e13606e91acb3715d5d",
      "tree": "21f85b6af385db5059898a771c9f99107e17668b",
      "parents": [
        "7f4e4281f8889511a9d641ed1eb47f92692efbb1"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Mar 15 15:25:24 2017 -0700"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Mar 15 21:09:47 2017 -0700"
      },
      "message": "Fix sign extension issues\n\nFix sign extension issues when reading and writing pointers to\nint32_t fields.  Cast the pointer to a uint32_t to check if it\nfits, and cast it through uintptr_t and uint32_t.\n\nBug: 36281983\nTest: m -j test-art-host with LibartImgHostBaseAddress \u003d\u003d 0xa0000000\nChange-Id: Idec99dcb5a47f2633a4f14c98af8e23c46dc7052\n"
    },
    {
      "commit": "f44d36c8423f81cbb5e9f55d8813e26ffa1a7f3b",
      "tree": "324b41485ce6c414c1a006c72cbcc5ed9f466138",
      "parents": [
        "8d6768d47b66a688d35399d524ad5a5450e9d9d4"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 14 14:18:46 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 14 19:03:20 2017 +0000"
      },
      "message": "Revert^2 \"Hash-based DexCache field array.\"\n\nTest: testrunner.py --host --interpreter\nBug: 30627598\n\nThis reverts commit 6374c58f2ea403b3a05fb27376110fe4d0fc8e3f.\n\nChange-Id: I275508e288a85d3aa08f7405a1a4f362af43b775\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": "6374c58f2ea403b3a05fb27376110fe4d0fc8e3f",
      "tree": "0aacaaf1f193e96b55e0b203b678ae724c0fb6f5",
      "parents": [
        "8f323e09e692ff4f95f40300391fe41fb96a6c49"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 13 14:51:19 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Mar 13 14:52:17 2017 +0000"
      },
      "message": "Revert \"Hash-based DexCache field array.\"\n\nReverting to allow rebasing the revert\n    https://android-review.googlesource.com/351689\nwithout too many conflicts.\n\nBug: 30627598\n\nThis reverts commit 1aea3510b8dd0c512cec61c91c5ef1f1e5d53d64.\n\nChange-Id: I4af65e9f41c8bad8106c028947eca7c5a9534c53\n"
    },
    {
      "commit": "1aea3510b8dd0c512cec61c91c5ef1f1e5d53d64",
      "tree": "94cbab7c3097ce7d3a1feb1a69f28406644af085",
      "parents": [
        "d1d4530ffa97729aa8944932a7ac2009ae51c7e3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Dec 08 11:39:42 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 10 12:59:37 2017 +0000"
      },
      "message": "Hash-based DexCache field array.\n\nTest: m test-art-host, both AOT and interpreter\nTest: m test-art-target, both AOT and interpreter\nTest: m valgrind-test-art-host\nBug: 30627598\nChange-Id: If992f091aadd862d17b09928d21659573dd285a0\n"
    },
    {
      "commit": "7ec0fde07816df30b5ab58d1a7a18aa4b68a374e",
      "tree": "e24f2d5ed8edb5600ca7fa02d52a12581a21b9fe",
      "parents": [
        "335f644f617d9837bc44219c70a2943f36c3f496"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Mar 08 12:43:30 2017 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Mar 08 13:25:14 2017 +0000"
      },
      "message": "Track libcore change 2c0c8889ff415431e3c2d6d5ac95748f8b284384.\n\nUpdate the size of Class\u0027 vtable.\n\nTest: make test-art-host\nChange-Id: I6613a3f1924a2347e0e4f9c4db31d126ab4deacc\n"
    },
    {
      "commit": "7cc3ae5705416bd8fc4b7096904e2871aa761e73",
      "tree": "7828e0346d1961b1454a56fa7759b72c13e1b67a",
      "parents": [
        "a86b359441f349d9057d05c32c88c375d794cf86"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 07 14:33:37 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 07 17:44:43 2017 +0000"
      },
      "message": "Return the right value in VerifyClass.\n\nWe used to return kNoFailure when a class was already processed.\nBut it could have had soft failures.\n\nAlso remove IsCompileTimeVerified to avoid future confusions and\nintroduce ShouldVerifyAtRuntime.\n\nAdd some more checks to make sure we record the right things in\nthe vdex file.\n\nbug: 33845394\ntest: verifier_deps_test test-art-host\nChange-Id: Iff11a96e825c85db416083413761981515f405b7\n"
    },
    {
      "commit": "bcf716f3e0c72aa8bb75b15e5b273a813658fdb5",
      "tree": "92d55371dc3859f4be6c05eb3fcd2b4670057b47",
      "parents": [
        "09c8235da86ce1d01b4dfb38a5af1481d13efe80"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 23 10:43:09 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 24 11:07:53 2017 +0000"
      },
      "message": "Revert^2 \"Enable String compression.\"\n\nTest: m test-art-host (interpreter, JIT, AOT)\nTest: m test-art-target on Nexus 6P (interpreter, JIT, AOT)\nTest: Nexus 6P boots\nTest: m ahat-test\nBug: 31040547\n\nThis reverts commit afcb365b2d3ae152989826c2afb0d98a9cf3f6be.\n\nChange-Id: Id7e27d717c8e36d3c7abdde59ca2c8fd4fc221c9\n"
    },
    {
      "commit": "c73cb64585f301c8bb3b03a0684f6baead99b7ac",
      "tree": "a11cf45d631116afbee446956defe80406cff082",
      "parents": [
        "fc5d8c28e5265634aeeb2f255dc8d5747e2919ee"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Feb 22 10:11:30 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Feb 22 10:11:30 2017 -0800"
      },
      "message": "ART: Remove ObjPtr kPoison template parameter\n\nMove to a global constexpr, so that object pointer poisoning can\nbe explicitly turned off for lower debug build overhead.\n\nBug: 35644797\nTest: m\nTest: m test-art-host\nChange-Id: I2412b67cbec144f2aee206fb48591abe581fd00a\n"
    },
    {
      "commit": "92907f3f7af106a9eeb341caba17f3770203f7fb",
      "tree": "c44f6b487c9ad078c044f19a4a6d72eaf4979d11",
      "parents": [
        "1b7ba9e15d9525eec7ea68e9ecf95e5777a46069"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 20 14:08:30 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Feb 21 12:31:52 2017 +0000"
      },
      "message": "Remove String.setCharAt().\n\nThe internal API String.setCharAt() breaks the assumption\nthat strings are really immutable. That in turn breaks\nstring compression invariants - compressible strings must\nbe compressed. This CL removes the String.setCharAt() API.\n\nThe method was used only in String.replace(char, char)\nwhen we found a match, copying the string on first match.\nInstead, introduce a new native method that does the whole\nreplacement with a single call when we find the first match.\n\nStringReplaceBenchmark results on Nexus 6P, lower is better:\n  timeReplaceCharNonExistent/EMPTY   41.93 -\u003e   38.25 (-9%)\n  timeReplaceCharNonExistent/L_16   114.90 -\u003e   95.09 (-17%)\n  timeReplaceCharNonExistent/L_64   419.97 -\u003e  320.65 (-24%)\n  timeReplaceCharNonExistent/L_256 1667.01 -\u003e 1091.25 (-35%)\n  timeReplaceCharNonExistent/L_512 3253.50 -\u003e 2075.62 (-36%)\n  timeReplaceCharRepeated/EMPTY      41.93 -\u003e   39.58 (-6%)\n  timeReplaceCharRepeated/L_16      114.87 -\u003e   95.40 (-17%)\n  timeReplaceCharRepeated/L_64     1267.29 -\u003e  704.32 (-44%)\n  timeReplaceCharRepeated/L_256    5139.14 -\u003e 1361.80 (-74%)\n  timeReplaceCharRepeated/L_512   10787.81 -\u003e 2338.41 (-78%)\n  timeReplaceSingleChar/EMPTY        41.78 -\u003e   37.16 (-11%)\n  timeReplaceSingleChar/L_16        449.54 -\u003e  497.51 (+11%)\n  timeReplaceSingleChar/L_64        942.08 -\u003e  891.35 (-5%)\n  timeReplaceSingleChar/L_256      2756.18 -\u003e 2174.64 (-21%)\n  timeReplaceSingleChar/L_512      5489.91 -\u003e 3983.32 (-27%)\n\nTest: testrunner.py --host\nTest: run-libcore-tests.sh --mode\u003dhost\nTest: testrunner.py --host with string compression enabled.\nTest: run-libcore-tests.sh --mode\u003dhost with string compression enabled.\nBug: 31040547\nChange-Id: I9cf0d5457182f0a33ca8251c29931d3eb624ae07\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": "8fd364e74d60a3bbcc6a58f1ee383a467f47c3b1",
      "tree": "933d368e4658b04e4485e8b3847932f0f951d5f1",
      "parents": [
        "1fed1dc7b1ea75b0465c0b2b3457718aab5a0f34"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Feb 17 12:47:28 2017 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Feb 17 14:18:47 2017 +0000"
      },
      "message": "ART: fix method handle invocation of abstract \u0026 interface methods\n\nBug: 35422408\nTest: m test-art-host\nChange-Id: I1f60501a7d2e9d8c8b935709ae2d624af9f882ef\n"
    },
    {
      "commit": "95c867dcb9c7ec109eac099a259ad3e4cddfb8b0",
      "tree": "3b0348528ecd3e7dd32c90c75f8a04da9db0aa9a",
      "parents": [
        "07af6d0c7b9e40380dfaca024fe40adbf47515b2",
        "afcb365b2d3ae152989826c2afb0d98a9cf3f6be"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 16 21:47:44 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 16 21:47:45 2017 +0000"
      },
      "message": "Merge \"Revert \"Enable String compression.\"\""
    },
    {
      "commit": "afcb365b2d3ae152989826c2afb0d98a9cf3f6be",
      "tree": "abba45a6314d4b83a1e1d004019b5c9bc360b34d",
      "parents": [
        "24bbf98cec9f39a2592892adb245ce15d58cab19"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 16 21:46:27 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 16 21:46:27 2017 +0000"
      },
      "message": "Revert \"Enable String compression.\"\n\nThe internal API String.setCharAt() is broken\nwith string compression.\n\nBug: 31040547\n\nThis reverts commit 24bbf98cec9f39a2592892adb245ce15d58cab19.\n\nChange-Id: If2c2fa0eb42a8613994dfa5299febf7a5de2bf31\n"
    },
    {
      "commit": "53ea6a10bb34342b21572aa12d7172cb585e1c0f",
      "tree": "4fcb54f16cf42b9984d534622e5b84246f582ba8",
      "parents": [
        "c898aa8d2865197cbeefc63d8ec78d93c305c68e",
        "24bbf98cec9f39a2592892adb245ce15d58cab19"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 16 13:24:35 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Feb 16 13:24:35 2017 +0000"
      },
      "message": "Merge \"Enable String compression.\""
    },
    {
      "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": "2a46b682b8fd0276c62e82a56a1f2ac63b210a95",
      "tree": "fca44701850a648a243d496dc547bab0e3ef5cd0",
      "parents": [
        "2d98ba68f13dc219c088a12f369c5778bf398f14",
        "c069a30d42aefd902c20e8bc09dfad1683f07ded"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Feb 14 16:02:32 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 14 16:02:33 2017 +0000"
      },
      "message": "Merge \"ART: invoke-custom support\""
    },
    {
      "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": "e39f14ff4e0d7c70016874cff24863b912d40bf1",
      "tree": "57588025e96e01ac2998cbdcf0ff12a822fdcd4e",
      "parents": [
        "4e4b62e21672dbacf5d5abb688a126aabad29269"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 10 15:44:25 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Feb 14 13:25:05 2017 +0000"
      },
      "message": "ARM64: Improve String.equals() intrinsic for const strings.\n\nAnd add additional tests to 021-string2.\n\naosp_angler-userdebug:\n  before:\n    arm64 boot*.oat: 43324664\n    arm64 boot*.oat/string compression: 43411112\n  after:\n    arm64 boot*.oat: 43300136 (-24528)\n    arm64 boot*.oat/string compression: 43345464 (-65648)\n\nThe string compression code size difference drops from\n86448 to 45328.\n\nTest: m test-art-target on Nexus 6P\nTest: m test-art-target on Nexus 6P with string compression enabled.\nBug: 31040547\nChange-Id: I99a3777b91b248da2b0ac25abd260f9e5abb2c09\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": "71953d82e802d8e8e1619562aea26ed3204bafd7",
      "tree": "2e06989273e3a8e98ccf6c3a40b431d5e05f20f8",
      "parents": [
        "ab58a629d6cfe75f0ed34326c2ca6364b2203885",
        "85c0f2ac03417f5125bc2ff1dab8109859c67d5c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 13 16:53:03 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 13 16:53:04 2017 +0000"
      },
      "message": "Merge \"Revert^2 \"Hash-based dex cache type array.\"\""
    },
    {
      "commit": "24bbf98cec9f39a2592892adb245ce15d58cab19",
      "tree": "176def9d02c8bb1d995b69e9b23f845aeeb96c15",
      "parents": [
        "ab58a629d6cfe75f0ed34326c2ca6364b2203885"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 02 17:48:20 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 13 13:31:04 2017 +0000"
      },
      "message": "Enable String compression.\n\nTest: m test-art-host (interpreter, JIT, AOT)\nTest: m test-art-target on Nexus 6P (interpreter, JIT, AOT)\nTest: Nexus 6P boots\nTest: m ahat-test\nBug: 31040547\nChange-Id: I2c2f74ca147b3ea98ef06f9c64553737d17d42fd\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": "595beb3ff0e8e9bc6ca9c3be453187a4a41ad7dc",
      "tree": "26480b97ebaf37f174416869552c96492b29e0cc",
      "parents": [
        "f8512f8515f7568984e1ca209929262ea88e4b59"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 06 14:11:54 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 09 15:50:27 2017 +0000"
      },
      "message": "Fix hprof/ahat for string compression.\n\nTest: m test-art-host\nTest: m ahat-test\nTest: m test-art-host with string compression enabled\nTest: m ahat-test with string compression enabled\nBug: 31040547\nChange-Id: I660e39c586d23f4a95686d484ca108466e52d249\n"
    },
    {
      "commit": "f85fc6bd9d65ef4689d6af797adb889da8cf15e3",
      "tree": "8fe8d622e30a550eb3a336bc12f925eb40828e6b",
      "parents": [
        "fe076a51b0498c2771341cc09a77db15b437328f",
        "8ca4e4e7a55f7a7079ec1f95a3188d9df434704b"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Feb 06 10:13:08 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 06 10:13:09 2017 +0000"
      },
      "message": "Merge \"Clean up art::mirror::Class::SetSuperClass.\""
    },
    {
      "commit": "90b936ddda63139ff46a6755c3b83ad6e4ab4ac5",
      "tree": "c7ce2c3004eecc16ab41ed7cde105c3019638d4b",
      "parents": [
        "b78a8af993e877d74c5938f65f95feaf2fa01321"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jan 31 08:58:55 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Feb 03 10:03:52 2017 -0800"
      },
      "message": "ART: Refactor verify_object.h\n\nMove the actual VerifyObject check into a new cc file, as we\ncommonly don\u0027t enable the check at all. This allows to cut the\n-inl include from almost all current users.\n\nThis also exposes missing -inl includes. Also fix up some of our old\nmess where .h defined functions require -inl.h defined functions.\n\nTest: m\n\nChange-Id: I3dd821bbe2015564a29bf1ed9be00f7a7276ad61\n"
    },
    {
      "commit": "8ca4e4e7a55f7a7079ec1f95a3188d9df434704b",
      "tree": "e8bb240938fdadcbe363ac00598ea43621c2c7a8",
      "parents": [
        "6058b682234060120c4407a1afad1182fa5a1baf"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Feb 03 15:12:38 2017 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Feb 03 17:35:54 2017 +0000"
      },
      "message": "Clean up art::mirror::Class::SetSuperClass.\n\n- Move its definition from runtime/mirror/class.h to\n  runtime/mirror/class-inl.h.\n- Prevent debug code from running in non-debug mode.\n\nTest: test-art-host\nChange-Id: I981cb9aa5c59c75c6a1c4d2145185cf8b147e2db\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": "66866e2b5710cf8135674d11c6912a6f023de186",
      "tree": "cfbfd895ac3c71aa3eae50e649866369b95ed987",
      "parents": [
        "dee81ab18f6be61add94256fbec90a913d09cc1a",
        "137cdfa1e8a3810fb86d3298ec10036c0491d13f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jan 27 19:11:31 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 27 19:11:32 2017 +0000"
      },
      "message": "Merge \"Avoid read barriers for ArtMethod::GetDexFile\""
    },
    {
      "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": "137cdfa1e8a3810fb86d3298ec10036c0491d13f",
      "tree": "db568fce8feec0ae6910ff1150cf46f08fe7e3e5",
      "parents": [
        "fbf47ea64a9f797a82030e919fa4f085c9eb5b28"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 26 14:03:11 2017 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 26 17:04:55 2017 -0800"
      },
      "message": "Avoid read barriers for ArtMethod::GetDexFile\n\nShows up in pmd benchmark from Class::FindDeclaredDirectMethod and\nClass::FindDeclaredVirtualMethod. There are still calls to\nIsProxyMethod that could probably be eliminated.\n\nReadBarrier::Mark goes from 12.39% to 3.45% according to perf.\n\nTest: test-art-host\n\nChange-Id: I6a4f2fa2d68bf5f393f83b9b70e8d6fcc9dbdaa2\n"
    },
    {
      "commit": "440b5d9bffafa46366f58599414e0cff35ea3a6a",
      "tree": "033967c68fff98790ba2ef6f84e31bcea36acbf0",
      "parents": [
        "f34077c96af3389e8eae65252d4c5d51cf630039"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jan 24 15:32:25 2017 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Jan 25 09:58:30 2017 -0800"
      },
      "message": "Implement class-pre-define time redefinition.\n\nThis allows one to redefine classes as they are being loaded without\nrestriction as to the types of transformations that may be included.\nFor example one is allowed to add additional methods or fields to the\nclass being defined.\n\nBug: 31684920\nTest: mma -j40 test-art-host\nChange-Id: I671ee13444c05f28424e727fd80d9d46c78ca287\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": "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": "39cee66a8ddf0254626c9591662cf87e4a1cedc4",
      "tree": "be25df71e51ce03a8847c23934322b8f282a291b",
      "parents": [
        "a3974581751cd73a896f7c4fcab71beb17c4f9dc"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 13 16:04:53 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 18 11:12:33 2017 +0000"
      },
      "message": "Entrypoints cleanup.\n\nRemove unused ones to facilitate the transition to compressed\ndex caches.\n\ntest: test-art-host, test-art-target\nChange-Id: I1d1cb0daffa86dd9dda2eaa3c1ea3650a5c8d9d0\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": "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": "9e68f5043323eaf4543ebf3b6f496145d8ae77a2",
      "tree": "bc6b03ddb6a20697709d92151a188c1f17458a25",
      "parents": [
        "7620a3b58a9286fae376f4705b602310e5fd464a",
        "65f5f247a367af9d6b9ac63767b69ecf3ab079bc"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Jan 12 18:58:38 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jan 12 18:58:39 2017 +0000"
      },
      "message": "Merge \"Fix race condition btw DelayReferenceRefernent vs Reference.clear().\""
    },
    {
      "commit": "811bd5ff0189122d34e8a1b8ccda889bbba4c0d1",
      "tree": "278b128c15dc32657e06fd38b7111407edef552f",
      "parents": [
        "b51edffe1c0b331a4d4d5298938c7c1b31ebaf6a"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Dec 07 11:35:37 2016 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jan 06 08:49:07 2017 +0000"
      },
      "message": "ART: Make method handle runtime code callable from compiler.\n\nMost of this change is moving the existing method handles code, but it\nalso introduces a new header file, common_dex_operations.h, that has\nsome operations taken from interpreter_common.{h,cc} that are also used\nby method handles (perform call, set field, get field).\n\nBug: 30550796\nTest: m test-art-host\nChange-Id: I2235e13770a5562950f2767f65a25ca273479150\n"
    },
    {
      "commit": "8ba654956553d79a2478f6d050044c5a963a3512",
      "tree": "8310b0d081c85cb6b5ebf93a50dd3f807be4eb74",
      "parents": [
        "8a26281ead6ccbc2e280545ac36d7c44415e0f26",
        "b3da36c182329f228b8c78d306a57fa11a6004ea"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Jan 05 22:15:30 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jan 05 22:15:30 2017 +0000"
      },
      "message": "Merge \"Reduce the number of fences needed for monitors\""
    },
    {
      "commit": "b3da36c182329f228b8c78d306a57fa11a6004ea",
      "tree": "707233fdaf345eb0b8068cfde5a1bff4e16aab53",
      "parents": [
        "1e33d05866bd5f146e2341712a1c06037e9d07a2"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Dec 15 13:12:59 2016 -0800"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Jan 04 15:18:22 2017 -0800"
      },
      "message": "Reduce the number of fences needed for monitors\n\nAdd the necessary CasWeakAcquire primitives for LockWords.\n\nHave MonitorEnter initially read the lockword using a\nmemory_order_relaxed operation. In the unlikely case we need more,\ncompensate with an explicit fence.\n\nIn the uncontended case, install the thin lock with Acquire,\nrather than SequentiallyConsistent semantics.\n\nHave MonitorExit use a Release instead of SequentiallyConsistent\nCAS in the ReadBarrier case. Add TODO for the other case.\n\nTogether, these should usually eliminate 3 fences (or acq/rel)\nper critical section.\n\nHave Install() only use Release ordering.\n\nAdd TODO for inflation spinning, which looks to me like it could be\nimproved appreciably.\n\nDrive-by fix:\n\nGetMaxSpinsBeforeThinLockInflation spelling\n\nTest: Build for several targets, boot, m art-test-host art-test-target\n\nChange-Id: I2cab09723252065f6365e4234ee3249c69ece888\n"
    },
    {
      "commit": "dba61481035b7944173181ec9ee02aea41dd0e29",
      "tree": "8629775e657cc8968e2f8fa2af6256c7a58c7dd4",
      "parents": [
        "cb2ce333ee2d1053919fe0acc390369bea3ad77e"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Dec 21 08:20:29 2016 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Dec 21 11:43:14 2016 -0800"
      },
      "message": "Revert \"Revert \"Revert \"Revert \"Basic obsolete methods support\"\"\"\"\n\nA GetDeclaringClass()-\u003eGetDexCache() got inserted during the\nmerge/review process meaning that we would try to access incorrect\ndex-cache in obsolete methods in some situations.\n\nAlso when using tracing we would loop forever (or at least until an\nOOM error) in test 916 due to tracing forcing InterpretOnly mode\nmeaning methods would never be jitted.\n\nBug: 32369913\nBug: 33630159\n\nTest: ART_TEST_TRACE\u003dtrue \\\n      ART_TEST_JIT\u003dtrue   \\\n      ART_TEST_INTERPRETER\u003dtrue mma -j40 test-art-host\n\nThis reverts commit f6abcda293b115a9d7d8a26376ea2dcf2d1dc510.\n\nChange-Id: I0773bfcba52e3cd51a83be815c6a50c189558f48\n"
    },
    {
      "commit": "f6abcda293b115a9d7d8a26376ea2dcf2d1dc510",
      "tree": "a30ce596848d14c95a73449dbf2bfccf26a510b9",
      "parents": [
        "ce77fc0e7f60a15354bb20c356537cbf8b53b722"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 21 09:26:18 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 21 09:26:18 2016 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Basic obsolete methods support\"\"\"\n\nFails in tracing mode\n\nBug: 32369913\nBug: 33630159\n\nThis reverts commit ce77fc0e7f60a15354bb20c356537cbf8b53b722.\n\nChange-Id: I1bdcf6ad467f2e31f9c5d0c3c987b90a4f5efc69\n"
    },
    {
      "commit": "ce77fc0e7f60a15354bb20c356537cbf8b53b722",
      "tree": "b4301967c423ab190a4274409d99a3d6e23f0e8a",
      "parents": [
        "d54f43ca39dfa92f08c2d760123f185f0f65fb86"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Dec 15 01:05:52 2016 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Dec 19 14:26:18 2016 -0800"
      },
      "message": "Revert \"Revert \"Basic obsolete methods support\"\"\n\nThis reverts commit b81a9840b44480bfeacd74b8d9f51e06f295411d.\n\nThere were 2 issues with the original CL\u0027s test 916-obsolete-jit that\ncaused it to sporadically fail.\n\nFirst, when checking if we had jitted the function under test in\n916-obsolete-jit we failed to check to see if the function \u0027doCall\u0027,\nwhich is used to work-around bugs in our deoptimization \u0026 compilation\nsystems, had also been jitted.\n\nIn the case where the \u0027sayHi\u0027 function had been jitted but the\n\u0027doCall\u0027 function had not we would (correctly) fail to redefine the\n\u0027Transform\u0027 class since we would not be able to deoptimize the \u0027sayHi\u0027\nfunction since it is under a quick_to_interpreter_bridge (runtime)\nframe.\n\nSecondly, the function Main.isInterpretedFunction was incorrect and\nwould always return false, regardless of the actual state of the\nfunction. This would cause the test to fail as the\nquick_to_interpreter_bridge frame prevented deoptimization of the\nobsoleted function. Usually the warm-up period was enough to make sure\nthe methods were jitted anyway but this was not guaranteed.\n\nBoth of these problems become more likely to occur on systems with\nmore cpu contention such as the buildbots.\n\nTest: stress --cpu 60 \u0026; while ./test/run-test --host --jit 916; do ; done\n\nReason for revert: Fixed bug in test that was causing failures.\n\nOriginal Tests:\n\nTest: ./test/run-test --host 914\nTest: ./test/run-test --host 915\nTest: ./test/run-test --host 916\nTest: mma -j40 test-art-host\nTest: ART_TEST_JIT\u003dtrue \\\n      ART_TEST_INTERPRETER\u003dtrue mma -j40 test-art-host\nTest: ./art/tools/run-jdwp-tests.sh --mode\u003dhost --variant\u003dX64\nTest: ./art/tools/run-jdwp-tests.sh --mode\u003dhost --variant\u003dX64 --no-jit\n\nBug: 32369913\nBug: 33630159\n\nChange-Id: If1a92e47b90965a7dc21c5826185debe62bd1554\n"
    },
    {
      "commit": "65f5f247a367af9d6b9ac63767b69ecf3ab079bc",
      "tree": "bff631b0efd7e8fe77be9c445ea9224e2b67433b",
      "parents": [
        "5b32b91d731d6187ada4c6fc804041b7b3b6903c"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Dec 19 11:44:47 2016 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Dec 19 11:44:47 2016 -0800"
      },
      "message": "Fix race condition btw DelayReferenceRefernent vs Reference.clear().\n\nRename IsMarkedHeapReference to IsNullOrMarkedHeapReference.\n\nMove the null check from the caller of IsMarkedHeapReference into\nIsNullOrMarkedHeapReference.\n\nMake sure that the referent is only loaded once between the null\ncheck and the IsMarked call.\n\nUse a CAS in ConcurrentCopying::IsNullOrMarkedHeapReference when\ncalled from DelayReferenceRefernent.\n\nBug: 33389022\nTest: test-art-host without and with CC.\n\nChange-Id: I20edab4dac2a4bb02dbb72af0f09de77b55ac08e\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": "46ee31b67d7ee1bd085fbc240502053caa3cf8fa",
      "tree": "83e870f293cd60d533207e389d7b094acd87b31f",
      "parents": [
        "9538f9e2a5d03f1b1bc07ebfbd93b61dcf8ad604"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Dec 14 10:11:49 2016 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 15 09:50:39 2016 -0800"
      },
      "message": "ART: Move to libbase StringPrintf\n\nRemove ART\u0027s StringPrintf implementation. Fix up clients. Add\nmissing includes where necessary.\n\nTest: m test-art-host\nChange-Id: I564038d5868595ac3bb88d641af1000cea940e5a\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": "b7cc593a34896e230aab6d9718239b4f85c2dc63",
      "tree": "fdad7132bcdf125e8c2a499bf794bc6bcbba76d3",
      "parents": [
        "bdca0a27eb034152afba52f1d499d773b81908df",
        "b81a9840b44480bfeacd74b8d9f51e06f295411d"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Dec 15 01:04:03 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Dec 15 01:04:03 2016 +0000"
      },
      "message": "Merge \"Revert \"Basic obsolete methods support\"\""
    },
    {
      "commit": "b81a9840b44480bfeacd74b8d9f51e06f295411d",
      "tree": "d79a3567b272b6eb4fb94d66a537cf92bef455db",
      "parents": [
        "d8936da27b792d1ca02e59c92456a1a53c7b9905"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Dec 15 00:59:05 2016 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Dec 15 00:59:05 2016 +0000"
      },
      "message": "Revert \"Basic obsolete methods support\"\n\nThis reverts commit d8936da27b792d1ca02e59c92456a1a53c7b9905.\n\nReason for revert: Some sort of race in JIT\n\nChange-Id: Ibb4e520bb0721d6d7aa2c841a52eb5baff07740e\n"
    }
  ],
  "next": "6d736d8edb0692ac70044c18045e2fcb3d14c1e5"
}
