)]}'
{
  "log": [
    {
      "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": "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": "6b040570b5f71bdb6a0aacf51a7613edf35785b7",
      "tree": "4c7a90ac29426931e6f19550be76e2afa1751801",
      "parents": [
        "b95c74b9788886b24b04db782ce64867cb4960d5"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Apr 20 20:07:21 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 21 09:41:07 2017 -0700"
      },
      "message": "ART: Clean up InlineMethodAnalyzer\n\nRemove dead code.\n\nTest: m test-art-host\nChange-Id: If86503fde2a77279a3169144bcae700101d81784\n"
    },
    {
      "commit": "b95c74b9788886b24b04db782ce64867cb4960d5",
      "tree": "f9b01a5b509d70bf66cfb69433f23d7019b892ce",
      "parents": [
        "d68677c5fde1ace16ea58d65733776c954e7acb4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Apr 20 19:43:21 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 21 09:41:03 2017 -0700"
      },
      "message": "ART: Move InlineMethodAnalyzer into compiler\n\nMove the infrastructure, which is now only used by the compiler.\n\nTest: mmma art\nChange-Id: I4a61e35f23736b226523d7349f49208ad852ad2f\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": "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": "3398c7874e002beaa6c2b2fadf183e7d1ddad23a",
      "tree": "7db754b5b0c3a6c68bc1f91d7cb2477f534d2ad3",
      "parents": [
        "462e21cc8d28a4d48342cf0f634bd1ecc63647d7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 30 10:27:43 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 03 14:06:27 2016 -0700"
      },
      "message": "Move ArtField to ObjPtr\n\nAdded EXPECT_OBJ_PTR_EQ and variants to gtests.\n\nFixed moving GC bugs in:\nClassLinker::CreatePathClassLoader\nClassLinkerTest: StaticFields\n\nObjPtr Decode call sites: 186 -\u003e 181.\n\nSome tests fail due to ResolvedFieldAccessTest, will fix in follow\nup CL.\n\nBug: 31113334\n\nTest: test-art-host CC baker\n\nChange-Id: I8b266ad00f3c20c8cbe7cfdf280d175083df0b88\n"
    },
    {
      "commit": "bdf7f1c3ab65ccb70f62db5ab31dba060632d458",
      "tree": "25cc77adfeb05232d0ab00aa561a693f1d71745c",
      "parents": [
        "d7eabc2cc1a88c1f7f927da61246ae65aab0626c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 30 16:38:47 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 30 17:02:53 2016 -0700"
      },
      "message": "ART: SHARED_REQUIRES to REQUIRES_SHARED\n\nThis coincides with the actual attribute name and upstream usage.\nPreparation for deferring to libbase.\n\nTest: m\nTest: m test-art-host\nChange-Id: Ia8986b5dfd926ba772bf00b0a35eaf83596d8518\n"
    },
    {
      "commit": "542451cc546779f5c67840e105c51205a1b0a8fd",
      "tree": "11e09bb5abaee12dddffefbe7e425291076dfa7a",
      "parents": [
        "85c4a4b8c9eabfe16e4e49f9b4aa78c1bf4be023"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 26 09:02:02 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 01 18:54:48 2016 -0700"
      },
      "message": "ART: Convert pointer size to enum\n\nMove away from size_t to dedicated enum (class).\n\nBug: 30373134\nBug: 30419309\nTest: m test-art-host\nChange-Id: Id453c330f1065012e7d4f9fc24ac477cc9bb9269\n"
    },
    {
      "commit": "ffc87076dda9878cb2cc098149bae441d38b9268",
      "tree": "e587208d6a8e62532792add3e1ace6b4e6d73e0f",
      "parents": [
        "97cbc9206e9adc473a90650ebdb5d620f517ff04"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Wed Apr 20 14:22:09 2016 +0100"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 28 16:15:04 2016 +0100"
      },
      "message": "Split profile recording from jit compilation\n\nWe still use ProfileInfo objects to record profile information. That\ngives us the flexibility to add the inline caches in the future and the\nconvenience of the already implemented GC.\n\nIf UseJIT is false and SaveProfilingInfo true, we will only record the\nProfileInfo and never launch compilation tasks.\n\nBug: 27916886\n\n(cherry picked from commit e5de54cfab5f14ba0b8ff25d8d60901c7021943f)\n\nChange-Id: I68afc181d71447895fb12346c1806e99bcab1de2\n"
    },
    {
      "commit": "141de8c4cf18923b4ee773a455102734ca9e4407",
      "tree": "582dcdd9f9712c8c842dd6f452e6390c82ff6fb4",
      "parents": [
        "1ee29d3dd3fbbf5df7821b70f45c49275c878e63"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 23 08:22:12 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 23 08:22:12 2016 +0000"
      },
      "message": "Revert \"ART: Weaken DCHECK\"\n\nChange that triggered this got reverted. This \"fix\" needs more investigation.\n\nThis reverts commit 1ee29d3dd3fbbf5df7821b70f45c49275c878e63.\n\nChange-Id: Iee9e88f0e993edc0c7212e36d48ded1d31209156\n"
    },
    {
      "commit": "1ee29d3dd3fbbf5df7821b70f45c49275c878e63",
      "tree": "d0a37a718f5f34ce763ee1ce27f60f2d4b3d3ee5",
      "parents": [
        "0197bb59a87583c2363cedd85a72bd401f38338b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Mar 22 22:03:46 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Mar 22 22:03:46 2016 -0700"
      },
      "message": "ART: Weaken DCHECK\n\nReturns may be either plain or quickened.\n\nChange-Id: Iee343c02fe3e02512c0ed60508525495a7cd5efb\n"
    },
    {
      "commit": "8b3f835f0cca5db53a727d1d77fc6c2430d53d51",
      "tree": "6e2615ec05df27d961969c1b1e005acc3b70d245",
      "parents": [
        "5bdcdca7e4b3acc1ed8a7112a93c3f2da490b606"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 09 13:45:39 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 09 14:47:17 2016 +0000"
      },
      "message": "ART: Write bit fields together in ComputeSpecialAccessorInfo().\n\nAvoid function calls between storing individual bit fields\nto allow the compiler (gcc/clang) to merge those writes\ntogether. Valgrind then marks the memory as \"defined\" while\nindividual bit field writes would leave it \"undefined\" and\nlater trigger the valgrind error:\n  Conditional jump or move depends on uninitialised value(s)\non DCHECK()s using the bit fields.\n\nBug: 27552451\nChange-Id: If6de5cbe231f99da0f974a0fc9a36c14e3dc071e\n"
    },
    {
      "commit": "354efa6cdf558b2331e8fec539893fa51763806e",
      "tree": "b2d91993fc46011d1eeb416d411bf16fb4d25c20",
      "parents": [
        "519281001dabe9060e2bfefc2382570bab26c96a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 04 19:46:56 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Feb 09 19:57:41 2016 +0000"
      },
      "message": "Try to substitute constructor chains for IPUTs.\n\nMatch a constructor chain where each constructor either\nforwards some or all of its arguments to the next (i.e.\nsuperclass constructor or a constructor in the same class)\nand may pass extra zeros (of any type, including null),\nfollowed by any number of IPUTs on \"this\", storing either\narguments or zeros, until we reach the contructor of\njava.lang.Object.\n\nWhen collecting IPUTs from the constructor chain, remove\nany IPUTs that store the same field as an IPUT that comes\nlater. This is safe in this case even if those IPUTs store\nvolatile fields because the uninitialized object reference\nwasn\u0027t allowed to escape yet. Also remove any IPUTs that\nstore zero values as the allocated object is already zero\ninitialized.\n\nChange-Id: If93022310bf04fe38ee741665ac4a65d4c2bb25f\n"
    },
    {
      "commit": "9f35ccd3880e2d4d03dce7d7edb4307fadddf62b",
      "tree": "1ee85d88ce2c30b2bfa67ad4363f47ffa8dd6630",
      "parents": [
        "1ef02af31d5936a59ddeb762cb3cf767b599787a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Feb 02 20:12:32 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Feb 02 20:12:32 2016 +0000"
      },
      "message": "ART: Fix bad manual rename of local variable.\n\nFollow up to\n    https://android-review.googlesource.com/198621 .\n\nBug: 26929002\nChange-Id: I11c5000d7b7bfaa866d45603c8c21d4ab8599a0e\n"
    },
    {
      "commit": "be10e8e99a78caae01fb65769218800d465144ae",
      "tree": "cfa5cd3264137febdba6e49cae0393c779c6439c",
      "parents": [
        "fa72bf1823a39b43552fa1b9ae572023830a4ac1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jan 22 12:09:44 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jan 28 18:13:53 2016 +0000"
      },
      "message": "Optimizing: Try pattern substitution when we cannot inline.\n\nChange-Id: I7c01f4494bac8498accc0f087044ec509fee4c98\n"
    },
    {
      "commit": "bd425facc6c86c15f64a3ff09d72e6e626a3f48c",
      "tree": "efae72cfbedfa188a9fc9467482fc332b966e9aa",
      "parents": [
        "620021e643518dc93dc618d3e9df1c33ff8a491c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 27 14:54:21 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 27 14:54:21 2015 +0000"
      },
      "message": "Remove stalled DCHECK.\n\nChange-Id: I446f3f6b6da6a3f2c883f794b2e6ffb379a89c95\n"
    },
    {
      "commit": "e401d146407d61eeb99f8d6176b2ac13c4df1e33",
      "tree": "17927f9bfe7d2041b5942c89832d55f9dedb24c5",
      "parents": [
        "2006b7b9b8e32722bd0d640c62549d8a0ac624b6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 22 13:56:20 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 29 18:45:49 2015 -0700"
      },
      "message": "Move mirror::ArtMethod to native\n\nOptimizing + quick tests are passing, devices boot.\n\nTODO: Test and fix bugs in mips64.\n\nSaves 16 bytes per most ArtMethod, 7.5MB reduction in system PSS.\nSome of the savings are from removal of virtual methods and direct\nmethods object arrays.\n\nBug: 19264997\nChange-Id: I622469a0cfa0e7082a2119f3d6a9491eb61e3f3d\n"
    },
    {
      "commit": "d5f1005da7599f149b1332402c9791ef2acb8c42",
      "tree": "7e6015d8aa0c5b5c0b69c77f93c4d08220c34119",
      "parents": [
        "9cce14f56a59bbce52254ffc50ea6817fd94d8dd"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 06 14:09:04 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 06 15:40:50 2015 +0100"
      },
      "message": "Quick: Inline synthetic accessors generated by jack.\n\nWhile javac names synthetic accessors \"access$nnn\", jack\nnames them \"-getN\", \"-putN\" and \"-wrapN\". For simplicity,\ntreat all methods starting with \"-\" as synthetic accessors.\n\nBug: 20873367\nChange-Id: I67990a6c2ef1d25dafe460ef70143a113bb5b7da\n"
    },
    {
      "commit": "3481ba2c4e4f3aa80d8c6d50a9f85dacb56b508b",
      "tree": "77551c0a6d060e5a3723ad35d2ab101038f9328a",
      "parents": [
        "095d209342420563becfec6676b46a6c6b839107"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Apr 13 12:22:36 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Apr 13 16:30:13 2015 +0100"
      },
      "message": "ART: Clean up includes.\n\nReduce dependencies to improve incremental build times.\nBreak up circular dependency involving class_linker-inl.h.\n\nChange-Id: I4be742c5c2b5cd9855beea86630fd68aab76b0db\n"
    },
    {
      "commit": "c785344b87221f5e4e6473e5b762e4e61fe65dcf",
      "tree": "cd32ad2c2604596a18926f04d4c313dab255ecfd",
      "parents": [
        "a29d93b380c9aeb8270e281aefbdd0c77a430d43"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 27 14:35:38 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 10 12:57:27 2015 -0700"
      },
      "message": "Move ArtField to native\n\nAdd linear alloc. Moved ArtField to be native object. Changed image\nwriter to put ArtFields after the mirror section.\n\nSavings:\n2MB on low ram devices\n4MB on normal devices\n\nTotal PSS measurements before (normal N5, 95s after shell start):\nImage size: 7729152 bytes\n23112 kB: .NonMoving\n23212 kB: .NonMoving\n22868 kB: .NonMoving\n23072 kB: .NonMoving\n22836 kB: .NonMoving\n19618 kB: .Zygote\n19850 kB: .Zygote\n19623 kB: .Zygote\n19924 kB: .Zygote\n19612 kB: .Zygote\nAvg: 42745.4 kB\n\nAfter:\nImage size: 7462912 bytes\n17440 kB: .NonMoving\n16776 kB: .NonMoving\n16804 kB: .NonMoving\n17812 kB: .NonMoving\n16820 kB: .NonMoving\n18788 kB: .Zygote\n18856 kB: .Zygote\n19064 kB: .Zygote\n18841 kB: .Zygote\n18629 kB: .Zygote\n3499 kB: .LinearAlloc\n3408 kB: .LinearAlloc\n3424 kB: .LinearAlloc\n3600 kB: .LinearAlloc\n3436 kB: .LinearAlloc\nAvg: 39439.4 kB\n\nNo reflection performance changes.\n\nBug: 19264997\nBug: 17643507\n\nChange-Id: I10c73a37913332080aeb978c7c94713bdfe4fe1c\n"
    },
    {
      "commit": "e5f13e57ff8fa36342beb33830b3ec5942a61cca",
      "tree": "02e370ecc4e0d955f28bfc71a41015f94fbb19b7",
      "parents": [
        "354d58ba776866ea7b1c71f0d0848d5aaa013ae3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 24 09:37:21 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 24 10:47:02 2015 -0800"
      },
      "message": "Revert \"Revert \"Add JIT\"\"\n\nAdded missing EntryPointToCodePointer.\n\nThis reverts commit a5ca888d715cd0c6c421313211caa1928be3e399.\n\nChange-Id: Ia74df0ef3a7babbdcb0466fd24da28e304e3f5af\n"
    },
    {
      "commit": "a5ca888d715cd0c6c421313211caa1928be3e399",
      "tree": "bdb08a2cbcf277ab7f02626a23b52a3fdf272ffe",
      "parents": [
        "2535abe7d1fcdd0e6aca782b1f1932a703ed50a4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 24 08:10:57 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 24 08:10:57 2015 +0000"
      },
      "message": "Revert \"Add JIT\"\n\nSorry, run-test crashes on target:\n0-05 12:15:51.633 I/DEBUG   (27995): Abort message: \u0027art/runtime/mirror/art_method.cc:349] Check failed: PcIsWithinQuickCode(reinterpret_cast\u003cuintptr_t\u003e(code), pc) java.lang.Throwable java.lang.Throwable.fillInStackTrace() pc\u003d71e3366b code\u003d0x71e3362d size\u003dad000000\u0027\n10-05 12:15:51.633 I/DEBUG   (27995):     r0 00000000  r1 0000542b  r2 00000006  r3 00000000\n10-05 12:15:51.633 I/DEBUG   (27995):     r4 00000006  r5 b6f9addc  r6 00000002  r7 0000010c\n10-05 12:15:51.633 I/DEBUG   (27995):     r8 b63fe1e8  r9 be8e1418  sl b6427400  fp b63fcce0\n10-05 12:15:51.633 I/DEBUG   (27995):     ip 0000542b  sp be8e1358  lr b6e9a27b  pc b6e9c280  cpsr 40070010\n10-05 12:15:51.633 I/DEBUG   (27995): \n\nBug: 17950037\nThis reverts commit 2535abe7d1fcdd0e6aca782b1f1932a703ed50a4.\n\nChange-Id: I6f88849bc6f2befed0c0aaa0b7b2a08c967a83c3\n"
    },
    {
      "commit": "2535abe7d1fcdd0e6aca782b1f1932a703ed50a4",
      "tree": "140026ff9638ff34050680b6c706b82fa1740b56",
      "parents": [
        "38fee8ef4bc0f4dbe2c6d1f5585895f0c4d16984"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 17 10:38:49 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Feb 23 16:45:49 2015 -0800"
      },
      "message": "Add JIT\n\nCurrently disabled by default unless -Xjit is passed in.\n\nThe proposed JIT is a method JIT which works by utilizing interpreter\ninstrumentation to request compilation of hot methods async during\nruntime.\n\nJIT options:\n-Xjit / -Xnojit\n-Xjitcodecachesize:N\n-Xjitthreshold:integervalue\n\nThe JIT has a shared copy of a compiler driver which is accessed\nby worker threads to compile individual methods.\n\nAdded JIT code cache and data cache, currently sized at 2 MB\ncapacity by default. Most apps will only fill a small fraction of\nthis cache however.\n\nAdded support to the compiler for compiling interpreter quickened\nbyte codes.\n\nAdded test target ART_TEST_JIT\u003dTRUE and --jit for run-test.\n\nTODO:\nClean up code cache.\nDelete compiled methods after they are added to code cache.\nAdd more optimizations related to runtime checks e.g. direct pointers\nfor invokes.\nAdd method recompilation.\nMove instrumentation to DexFile to improve performance and reduce\nmemory usage.\n\nBug: 17950037\n\nChange-Id: Ifa5b2684a2d5059ec5a5210733900aafa3c51bca\n"
    },
    {
      "commit": "956af0f0cb05422e38c1d22cbef309d16b8a1a12",
      "tree": "b558c804d206dad8da648b815750f1b3c97610ae",
      "parents": [
        "407d77f344cfbdbbfb50531c5f0766bc0892e2fe"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 11 14:34:28 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 12 09:33:34 2014 -0800"
      },
      "message": "Remove portable.\n\nChange-Id: I3bf3250fa866fd2265f1b115d52fa5dedc48a7fc\n"
    },
    {
      "commit": "575e78c41ece0dec969d31f46be563d4eb7ae43b",
      "tree": "16906df0ba0912a6cb01b3139ba7c60d5f9d09b7",
      "parents": [
        "2998e9cdc9f19c30c4944a4726ed9f147de79ebd"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 03 23:41:03 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 03 23:41:03 2014 -0800"
      },
      "message": "ART: Replace COMPILE_ASSERT with static_assert (runtime)\n\nReplace all occurrences of COMPILE_ASSERT in the runtime tree.\n\nChange-Id: I01e420899c760094fb342cc6cb9e692dd670a0b2\n"
    },
    {
      "commit": "29a2648821ea4d0b5d3aecb9f835822fdfe6faa1",
      "tree": "2eb972b2b006e4d2842c8cf6a1d6631f90a39249",
      "parents": [
        "dbb8727b0b3ae73e84fb8db55e051336d6222add"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 02 15:27:29 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 02 15:35:19 2014 -0700"
      },
      "message": "Move DecodedInstruction into MIR.\n\nChange-Id: I188dc7fef4f4033361c78daf2015b869242191c6\n"
    },
    {
      "commit": "c8f60a69a9f2420fc1ecafec612a667be8dcd547",
      "tree": "dff78a37faedcbe9964ba30ed69f8175365e9d7b",
      "parents": [
        "e1fced1d1805caec04b6e97d2b01a4977c6785c6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 02 15:24:05 2014 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Apr 07 17:14:39 2014 +0100"
      },
      "message": "Inlining synthetic accessors.\n\nBug: 11549140\nChange-Id: I0d6a38c51887f55563414c240ac42ee64bdb5426\n"
    },
    {
      "commit": "e1fced1d1805caec04b6e97d2b01a4977c6785c6",
      "tree": "ea5cf241f7237b6d1616301c46d3d184333ca10e",
      "parents": [
        "427ca38b0a6c6fd7dc0dbb380619e2b91b56cf1c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Apr 04 14:52:53 2014 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Apr 07 16:59:13 2014 +0100"
      },
      "message": "Inlining setters that return one of their arguments.\n\nUseful for builder classes and synthetic setters. The latter\nare not inlined yet since they are static methods, i.e. they\ndon\u0027t use \"this\" as the object for IPUT.\n\nChange-Id: I3d34156c3629b837a0a95ccc34a8aae3f4a636d5\n"
    },
    {
      "commit": "73ed718e7b08d17fd2e4af9bceb5e74ac46db676",
      "tree": "54ffaf38ad27e3307ec2b43bb1993f40569e27d8",
      "parents": [
        "389e11db6ef350b806f7a3f0d7b7df23b0ab6e0c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 04 18:02:08 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 04 18:02:15 2014 -0700"
      },
      "message": "Revert \"Inlining setters that return one of their arguments.\"\n\nBug: 13817614\n\nThis reverts commit 8e40c3e662d852da87b6bcfe79355f96ab9e91c7.\n\nChange-Id: Ia7ed2d933514781150b2e0b9855244e383c60187\n"
    },
    {
      "commit": "389e11db6ef350b806f7a3f0d7b7df23b0ab6e0c",
      "tree": "fdeb0bd312f57bc57c244658660e00cc23453c45",
      "parents": [
        "818b4cf753d6e8a294f0fbe2e3bd9168eea9f762"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 04 18:02:04 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 04 18:02:04 2014 -0700"
      },
      "message": "Revert \"Inlining synthetic accessors.\"\n\nThis reverts commit 505ebb0e7b42e7facc8354515b06333ee8b84b10.\n"
    },
    {
      "commit": "505ebb0e7b42e7facc8354515b06333ee8b84b10",
      "tree": "6f7adb2333b5a3b8b903097cf80f8b7896ed7d2e",
      "parents": [
        "8e40c3e662d852da87b6bcfe79355f96ab9e91c7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 02 15:24:05 2014 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Apr 04 17:25:17 2014 +0100"
      },
      "message": "Inlining synthetic accessors.\n\nBug: 11549140\nChange-Id: Ie0034a6840b1beaa3df92f26bf9d315119c81e34\n"
    },
    {
      "commit": "8e40c3e662d852da87b6bcfe79355f96ab9e91c7",
      "tree": "866b2a827ed70a36ba060bb6d79fa8f1fc4b9fcd",
      "parents": [
        "764c798b57b7baa04885fcdf5eba5708a01b9edc"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Apr 04 14:52:53 2014 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Apr 04 16:15:51 2014 +0100"
      },
      "message": "Inlining setters that return one of their arguments.\n\nUseful for builder classes and synthetic setters. The latter\nare not inlined yet since they are static methods, i.e. they\ndon\u0027t use \"this\" as the object for IPUT.\n\nChange-Id: I946cf570195be83ecec5fb32851bcaefad45f8a5\n"
    },
    {
      "commit": "2c87c4d999bccdff6cc60bf6af4871cca6e2c893",
      "tree": "73e2ed92aac81661708d4c8cfce3d026e7e9614c",
      "parents": [
        "0d9c02e661813abdf18b4e7544e204d2da719d20"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Mar 21 11:31:51 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Mar 21 14:28:09 2014 +0100"
      },
      "message": "Support inlining detection from debugger.\n\nIn the context of the compiler, every method and field should be resolved. The\nInlineMethodAnalyser uses that property so we don\u0027t inline unresolved methods\nor methods accessing unresolved fields. In the context of the debugger, this is\nnot true. We may install a breakpoint in a method that\u0027s never been resolved\nyet for instance.\n\nThis CL weaks that property so we can detect getter/setter methods can be\ninlined even if they\u0027re not resolved yet. To differentiate both contexts, we\npass a null inline method pointer to InlineMethodAnalyser::AnalyseIGetMethod.\n\nBug: 12187616\nChange-Id: I247f315b9abd6b065d5a7ec4116de15a6cce7649\n"
    },
    {
      "commit": "e3e0260c23d8999b9433715ac7ee5296ee2fd633",
      "tree": "8f13f12f929e36d9366583934ebb4a20b4ce09b7",
      "parents": [
        "ca46e2003360b44f4c043f6da87092592bc3d6d6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 12 15:42:41 2014 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 12 17:59:23 2014 +0000"
      },
      "message": "Move inline method detection to runtime.\n\nThe debugger needs this for selective deoptimization.\n\nChange-Id: I8100000449b56e619288fb05d41ea6f02b53b334\n"
    }
  ]
}
