)]}'
{
  "log": [
    {
      "commit": "2808be84a8f86542450670acdb5e6b55498ff5f0",
      "tree": "f41b63e3109a6a6a9bd534f32b8d92f20eb9ef35",
      "parents": [
        "460f05480379d5c75555d06c4938bc990ce6ff83"
      ],
      "author": {
        "name": "Artem Serov",
        "email": "artem.serov@linaro.org",
        "time": "Thu Dec 20 19:15:11 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jul 15 09:30:36 2019 +0000"
      },
      "message": "ART: Introduce stackmap with no DexRegInfo.\n\nSome of safepoints don\u0027t need to have DexRegisterMap info;\nthis will decrease the stackmap size.\n\n.oat file size reduction:\n - boot.oat:           -233 kb (-5.4%)\n - boot-framework.oat: -704 kb (-4.9%)\n\nTest: 461-get-reference-vreg, 466-get-live-vreg.\nTest: 543-env-long-ref, 616-cha*.\nTest: test-art-target, +gc-stress.\n\nChange-Id: Idbad355770e30a30dcf14127642e03ee666878b8\n"
    },
    {
      "commit": "f52d92fce224c86491d9b0fd6fca805564119426",
      "tree": "fbf38f272a980e965627918d9dc6bbb536395c00",
      "parents": [
        "e660f7232a19a2c173f562b8e0987755a78ee298"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 29 12:33:02 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Apr 01 09:37:59 2019 +0000"
      },
      "message": "ObjPtr\u003c\u003e-ify Monitor/-Pool.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nBug: 31113334\nChange-Id: I2d2ebc5ef56e73e5678e0cfcd84c479611dfcca8\n"
    },
    {
      "commit": "119733d87242414100df7b9eedb6d1672a03ead6",
      "tree": "19ba75bd42d3c94a4de0684ae66f4078da1546a6",
      "parents": [
        "8a64e773d4d1221166c6a8206315b450e448705a"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 30 15:14:41 2019 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Jan 31 15:39:55 2019 +0000"
      },
      "message": "Revert \"Revert \"ART: introduce PALette abstraction layer\"\"\n\nThis reverts commit e6e01a0a00de80704ccb21c48d5d8bdee4470b77.\n\nBug:  122824298\nTest: art/test/testrunner/run_build_test_target.py -j50 art-test-javac\nTest: m out/target/common/obj/PACKAGING/hiddenapi-stub-flags.txt\nTest: frameworks/rs/build_rs.py\nChange-Id: If7b9ddca3daa80b75b3541abd283bf47d5b81118\n"
    },
    {
      "commit": "e6e01a0a00de80704ccb21c48d5d8bdee4470b77",
      "tree": "8f9cc651764686140accaadcfb8f77bf7572c24b",
      "parents": [
        "4b9d00aca9b025b545c9633b4605334c22fc4d2d"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 30 14:02:30 2019 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 30 14:02:30 2019 +0000"
      },
      "message": "Revert \"ART: introduce PALette abstraction layer\"\n\nThis reverts commit 4b9d00aca9b025b545c9633b4605334c22fc4d2d.\n\nReason for revert: breaks renderscript mac and run_host_tests in master.\n\nChange-Id: I6024894a384c65f3e7d81b9c5bba8ebe8ce1b420\n"
    },
    {
      "commit": "4b9d00aca9b025b545c9633b4605334c22fc4d2d",
      "tree": "7984bf247f908d145b7c6b48df99f3f0a80ae148",
      "parents": [
        "4ee4561f2153f3b0bc3be2e781488a97c73ca58e"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Jan 03 17:04:02 2019 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 30 09:00:27 2019 +0000"
      },
      "message": "ART: introduce PALette abstraction layer\n\nThis change decouples direct dependencies on system libraries.\n\nBug: 122824298\nTest: art/test.py --host --64\nTest: art/test.py --target -j8\nTest: m -j100 \u0026 flashall -w \u0026 device boots\nTest: art/build/apex/runtests.sh\nChange-Id: Iae927ed9aaa228a941cd444cef04e6ec53955299\n"
    },
    {
      "commit": "c1896c9a0e15df3a1b9a3a19bcd2a933b654fe06",
      "tree": "b68a5f5163f8da0da87d671a225addaa2a13095f",
      "parents": [
        "f2970cd870948a6ee1c8ecd30c9c3147d05aa0be"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 29 11:33:18 2018 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 29 11:33:18 2018 -0800"
      },
      "message": "C++17 compatibility: make WITH_TIDY\u003d1 happy again.\n\nBug: http://b/111067277\nTest: builds\nChange-Id: I8b69ea3815e14bb6eb27f40c0dd01a85b340a355\n"
    },
    {
      "commit": "c7d878d4be3f0971d4b86266308c7540a26c2856",
      "tree": "041a6d897df81ae64f25c211f16e8640959a35f5",
      "parents": [
        "d295a75d952742604eaae0530daea19dd6fd782c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 19 18:42:06 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 19 17:09:07 2018 -0800"
      },
      "message": "Revert^4 \"ART: Add StackVisitor accepting a lambda\"\n\nThis reverts commit ec43a01e0ac948c59d5b1f9c3812f2901b48942a.\n\nReason for revert: Added missing code.\n\nBug: 115837065\nTest: m test-art-host\nChange-Id: Id30ccdf9aa9a6e56a914254793e399f2712c882d\n"
    },
    {
      "commit": "ec43a01e0ac948c59d5b1f9c3812f2901b48942a",
      "tree": "57e1a23dcc0beba8e98841b8cf063f6153b08c9b",
      "parents": [
        "3d477f3a3eea757a49ca621cc579f711f22fccdd"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Nov 17 13:10:40 2018 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Nov 17 13:10:40 2018 +0000"
      },
      "message": "Revert \"Revert^2 \"ART: Add StackVisitor accepting a lambda\"\"\n\nThis reverts commit 3d477f3a3eea757a49ca621cc579f711f22fccdd.\n\nBug: 115837065\n\nReason for revert: Breaks jdwp tests.\n\nChange-Id: I09249331798970751a20c6b41675c3efef72adfb\n"
    },
    {
      "commit": "3d477f3a3eea757a49ca621cc579f711f22fccdd",
      "tree": "b4b402d0181610c62062c8c597ef30ee2840b6b1",
      "parents": [
        "54c7da9c50ee85ade636605cd6ea18b4c2bc69fa"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 16 16:40:45 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 16 10:13:38 2018 -0800"
      },
      "message": "Revert^2 \"ART: Add StackVisitor accepting a lambda\"\n\nThis reverts commit 8248490f24e8582ce2ead8cd878d8a2c38310a48.\n\nReason for revert: Fixed instrumentation.cc\n\nBug: 115837065\nTest: m test-art-host\nChange-Id: I484833f4712c835fcaf3452dca4cae5b031d5a7d\n"
    },
    {
      "commit": "c980df6125e53bbf8e5e7e8eecb3f9b0125bae5e",
      "tree": "966f80eb3959b94a5508525b0726e05f53ac7286",
      "parents": [
        "3d719ed950772e1ec70fe082863e907d5acd3fcf",
        "8248490f24e8582ce2ead8cd878d8a2c38310a48"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 16 01:18:34 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Nov 16 01:18:34 2018 +0000"
      },
      "message": "Merge \"Revert \"ART: Add StackVisitor accepting a lambda\"\""
    },
    {
      "commit": "8248490f24e8582ce2ead8cd878d8a2c38310a48",
      "tree": "f542af6560561526fc413e361e3323a615b5429c",
      "parents": [
        "36f8d22c672498753b9edc66ba11acc9816b2a17"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 16 00:47:49 2018 +0000"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 16 00:47:49 2018 +0000"
      },
      "message": "Revert \"ART: Add StackVisitor accepting a lambda\"\n\nThis reverts commit 36f8d22c672498753b9edc66ba11acc9816b2a17.\n\nReason for revert: Seems to be breaking test 687\n\nBug: 115837065\nChange-Id: I83bb1a9d76cc701c3d582778e5047ebd5dab5d29\nTest: TreeHugger\n"
    },
    {
      "commit": "e09485f761220ff16129d25b773ab968d3c2d76b",
      "tree": "87f93a1c3e2d2c7805859231c9cb7dd92a778bba",
      "parents": [
        "9e70fafa9ca3bf055fe1e9d8cba4ddb4ee090776",
        "36f8d22c672498753b9edc66ba11acc9816b2a17"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Nov 15 21:44:18 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Nov 15 21:44:18 2018 +0000"
      },
      "message": "Merge \"ART: Add StackVisitor accepting a lambda\""
    },
    {
      "commit": "c665d6368e85a5eb8055a58c535b41777c97d7c7",
      "tree": "712cc488031bbf89767676d3a651df1a94ada611",
      "parents": [
        "4fc843c4fc9f33c4ba49c1303d526d0e0e6a3788"
      ],
      "author": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Tue Nov 06 16:20:13 2018 +0000"
      },
      "committer": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Fri Nov 09 07:52:11 2018 -0800"
      },
      "message": "Revert^2 \"Notify waiters when releasing the monitor\"\n\nThis reverts commit 9cec9658ec0b7a6c715a154ec834faba853188e3.\n\nReason for revert: Changed lock ordering to not require reacquiring the\nmonitor lock while holding the wait lock.\n\nTested: 1000 iterations of ThreadStress\nBug: 117842465\nChange-Id: I7b54943052c5eba367eac86da9646bfc81bc1163\n"
    },
    {
      "commit": "9cec9658ec0b7a6c715a154ec834faba853188e3",
      "tree": "84d926444e66b5c5f91a7ee68fa65d5efe3ba8c0",
      "parents": [
        "1ebb52ca700b6d9f9c27c3ee3e688ed17a43d358"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Nov 06 10:50:20 2018 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Nov 06 10:50:20 2018 +0000"
      },
      "message": "Revert \"Notify waiters when releasing the monitor\"\n\nThis reverts commit 1ebb52ca700b6d9f9c27c3ee3e688ed17a43d358.\n\nReason for revert: Break ART run-test ThreadStress by failing this\nassertion:\n\n  dalvikvm32 E 11-06 09:43:27 27100 27851 mutex-inl.h:134] Lock level violation: holding \"a thread wait mutex\" (level ThreadWaitLock - 9) while locking \"a monitor lock\" (level MonitorLock - 54)\n  dalvikvm32 F 11-06 09:43:27 27100 27851 mutex-inl.h:145] Check failed: !bad_mutexes_held\n\nBug: 117842465\nChange-Id: I888201bf5c252c8366618d9169a37e4a4cc29734\n"
    },
    {
      "commit": "1ebb52ca700b6d9f9c27c3ee3e688ed17a43d358",
      "tree": "dbc70ca80226ea0abb7a404a122b81400b90f52d",
      "parents": [
        "23d3ed8c124f239d26a583f9d096b22f7f6677d1"
      ],
      "author": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Thu Oct 25 15:37:14 2018 -0700"
      },
      "committer": {
        "name": "Charles Munger",
        "email": "clm@google.com",
        "time": "Fri Nov 02 18:06:46 2018 -0700"
      },
      "message": "Notify waiters when releasing the monitor\n\nThis avoids a ping-pong thread scheduling issue, where a waiter\nimmediately tries to acquire the monitor held by the notifier.\n\nBug: 117842465\n\nChange-Id: I33b91b066c9412b031fd6432bcb61273fb8d8fea\n"
    },
    {
      "commit": "36f8d22c672498753b9edc66ba11acc9816b2a17",
      "tree": "7a7195bf16db14d7f56f94a4d6421f6837b2f686",
      "parents": [
        "a53da8f8170ddaff3e4160641938ba1b7806202c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Oct 08 08:13:42 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Nov 02 16:01:30 2018 -0700"
      },
      "message": "ART: Add StackVisitor accepting a lambda\n\nTo simplify implementation of visitors. Rewrite some\nvisitors.\n\nBug: 115837065\nTest: mmma art\nTest: m test-art-host\nChange-Id: I04172d7626b702c1d69c63eba65526378935a25d\n"
    },
    {
      "commit": "98ea9d9d82ab078ca10fa7f8e02eddda94cf1d98",
      "tree": "a848b7e41ff227a2d3d4d6795ec11089f39cb6ca",
      "parents": [
        "02338775e33b553be51d44ff60bb1ef8e527bd94"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Oct 19 14:06:15 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Oct 23 15:19:55 2018 -0700"
      },
      "message": "ART: Refactor for bugprone-argument-comment\n\nHandles runtime.\n\nBug: 116054210\nTest: WITH_TIDY\u003d1 mmma art\nChange-Id: Ibc0d5086809d647f0ce4df5452eb84442d27ecf0\n"
    },
    {
      "commit": "125a3a4604f7d543334ee6b3d6fd15d0a6e5897a",
      "tree": "d4c572017ae0bc1c311b865cce6d8d9592f141dd",
      "parents": [
        "025059b5bc5974717e94d95cf2d82ff1ad51e75d",
        "2337d53846d9d2e7f82f8cf64ff25585ad010339"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Aug 31 23:40:07 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 31 23:40:07 2018 +0000"
      },
      "message": "Merge changes I207718d6,I700ef52e\n\n* changes:\n  ART: Restrict some checks in the verifier to P+\n  ART: Add API level to verifier\n"
    },
    {
      "commit": "f73cacaae3d8f89327d8886b37792a849cabd9ac",
      "tree": "79047e31d512d065db47af7e68fa155c1f638f11",
      "parents": [
        "bbc6e7edb5fca4a61ac53dd9bce79cb4f0bb3403"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 24 17:19:07 2018 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Aug 28 11:09:40 2018 +0100"
      },
      "message": "Remove superfluous \u0027virtual\u0027 specifiers in ART.\n\nRemove \u0027virtual\u0027 specifier on methods already bearing the \u0027override\u0027\nspecifier.\n\nTest: mmma art\nChange-Id: I114930969a5ca048d88de9ecd18e2c6403593e31\n"
    },
    {
      "commit": "bbc6e7edb5fca4a61ac53dd9bce79cb4f0bb3403",
      "tree": "0fbce767bc383358cf4cd65aafc74140e1850982",
      "parents": [
        "19379b58bd433da91230e4fe6cd96e7416d16adc"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Fri Aug 24 16:58:47 2018 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Aug 28 11:06:07 2018 +0100"
      },
      "message": "Use \u0027final\u0027 and \u0027override\u0027 specifiers directly in ART.\n\nRemove all uses of macros \u0027FINAL\u0027 and \u0027OVERRIDE\u0027 and replace them with\n\u0027final\u0027 and \u0027override\u0027 specifiers. Remove all definitions of these\nmacros as well, which were located in these files:\n- libartbase/base/macros.h\n- test/913-heaps/heaps.cc\n- test/ti-agent/ti_macros.h\n\nART is now using C++14; the \u0027final\u0027 and \u0027override\u0027 specifiers have\nbeen introduced in C++11.\n\nTest: mmma art\nChange-Id: I256c7758155a71a2940ef2574925a44076feeebf\n"
    },
    {
      "commit": "6cc23acba91d26d7afd6bc681004ac5865a8a163",
      "tree": "d5b6850d7ce511658a33ca417764eac92cafe2d1",
      "parents": [
        "e9dce6a280057315a8a58ed46190c9a893c90fba"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Aug 24 15:22:43 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Aug 24 15:22:43 2018 -0700"
      },
      "message": "ART: Add API level to verifier\n\nPass API level to verifier. In preparation for API-level dependent\nchecks.\n\nBug: 111969862\nTest: m test-art-host\nChange-Id: I700ef52e28436a7fda8b9d9ef29841110ed6d3bb\n"
    },
    {
      "commit": "42c2e503f0fe3c6ffb6eb851efd4bcb27e4189d5",
      "tree": "d17d9b8dfc17d7a00eeaf992fcd779d3a394d387",
      "parents": [
        "d8d3adcb2ab08725fcb9477887fb462748a4c6bf"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 19 12:30:56 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 19 12:37:55 2018 -0700"
      },
      "message": "Refactor CasField32\n\nRemove excessive copy paste and add arguments to cover different\ntypes of CAS operations.\n\nTest: test-art-host\n\nChange-Id: I3f58a5f84156aa0491b9e5145f3891f16217e05c\n"
    },
    {
      "commit": "8bb3c68422ce06f444d7c4e49c7af7b1c5cbeb7c",
      "tree": "0175ac70c195038951546a81387835e4392fa4c2",
      "parents": [
        "493bf736c698945ec88042500f24d93190ecfe74"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jun 18 12:53:10 2018 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jun 18 14:58:01 2018 -0700"
      },
      "message": "Use strong CAS for identity hash code\n\nFixes an issue where the boot image was undeterministic when the\nweak CAS supriously failed.\n\nBug: 70918261\nTest: test-art-host\nChange-Id: I30854d72955dae7224b4952d3c60b0ebf428c1c6\n"
    },
    {
      "commit": "c3d5b84592b6d9c529090cfd1e5e9fb72a00f80b",
      "tree": "8e9f50d3e4cb50a808873cfc5a12bb4b516e9307",
      "parents": [
        "c523600ec234e00dfdc31149e9bda9c4f27addf7"
      ],
      "author": {
        "name": "Daniel Colascione",
        "email": "dancol@google.com",
        "time": "Sun Apr 15 10:52:18 2018 -0700"
      },
      "committer": {
        "name": "Daniel Colascione",
        "email": "dancol@google.com",
        "time": "Sun Apr 15 10:52:18 2018 -0700"
      },
      "message": "Change monitor doc comment to reflect lock deflation\n\nTest: no code change\nChange-Id: Ief5a9ebc71ab5cee3fe96fe5b00c104b3119b25a\n"
    },
    {
      "commit": "27b967611b48120bf0140995ae439700fe6cc139",
      "tree": "fb6a3ce8c7bb50cfd5e265533dab3894d52f4716",
      "parents": [
        "ba6d632c0e7617a1a848551612d7cb9e60b450e6"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Mar 13 16:06:57 2018 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Mar 29 12:44:43 2018 +0100"
      },
      "message": "ART: Simplify quasi_atomic.h\n\nRemoves fences that duplicate std::atomic_thread_fence().\n\nBug: 71621075\nTest: art/test.py --host -j32\nTest: art/test.py --target --64 -j4\nChange-Id: I008de4d242d1a3cf4d3f50ce171abbbda647bdaa\n"
    },
    {
      "commit": "88591fe82f499de10591f5b77efac71f8954eae2",
      "tree": "bfa126ad55ee091e3b615bd3bb60d5f8cfb6e37a",
      "parents": [
        "e8a4e378c5a928d5de07bee6db99150a57dabcd8"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Mar 06 13:35:43 2018 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Mar 23 15:01:15 2018 +0000"
      },
      "message": "ART: Simplify atomic.h\n\nPrefer std::atomic operations over wrappers in atomic.h. Exceptions\nare cases that relate to the Java data memory operations and CAS\noperations.\n\nBug: 71621075\nTest: art/test.py --host -j32\nTest: art/test.py --target --64 -j4\nChange-Id: I9a157e9dede852c1b2aa67d22e3e604a68a9ef1c\n"
    },
    {
      "commit": "c431b9dc4b23cc950eb313695258df5d89f53b22",
      "tree": "422273559c3ae52caff0c6b1cf1a62a8312f0e26",
      "parents": [
        "f46f46cf5bd32788d5252b7107628a66594a5e98"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Mar 02 12:01:51 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Mon Mar 05 13:58:20 2018 -0800"
      },
      "message": "Move most of runtime/base to libartbase/base\n\nEnforce the layering that code in runtime/base should not depend on\nruntime by separating it into libartbase.  Some of the code in\nruntime/base depends on the Runtime class, so it cannot be moved yet.\nAlso, some of the tests depend on CommonRuntimeTest, which itself needs\nto be factored (in a subsequent CL).\n\nBug: 22322814\nTest: make -j 50 checkbuild\n      make -j 50 test-art-host\n\nChange-Id: I8b096c1e2542f829eb456b4b057c71421b77d7e2\n"
    },
    {
      "commit": "0225f8e2939a9340cb7dcebfcfe7996a2bd9bce9",
      "tree": "fd32362dff4ecdc8ff8b0d800a1b46fb0d9d0104",
      "parents": [
        "c7e546ff3963a1d51b1f100d308db735bd19f736"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Jan 31 08:52:24 2018 +0000"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Wed Jan 31 01:24:53 2018 -0800"
      },
      "message": "Revert \"Revert \"Make libdexfile build independent of runtime dir\"\"\n\nThis reverts commit 787784f9effb126b5d0d3dc97d544c4a477b5daf.\n\nReason for revert: Bot configuration issue.\n\nChange-Id: I6a10bb4a9571f89c7e4dd095f9157e830a44e2de\nBug: 22322814\nTest: make -j 50 checkbuild\n"
    },
    {
      "commit": "787784f9effb126b5d0d3dc97d544c4a477b5daf",
      "tree": "1ff6d9fd284a4dd2a337165dff20e71137997c9d",
      "parents": [
        "b40b7e73469339a6b667b4a2e2b8690112a74dc9"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jan 30 18:48:51 2018 +0000"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jan 30 18:48:51 2018 +0000"
      },
      "message": "Revert \"Make libdexfile build independent of runtime dir\"\n\nThis reverts commit b40b7e73469339a6b667b4a2e2b8690112a74dc9.\n\nReason for revert: on device libdexfile.so missing\n\nChange-Id: I9bd61a98bef870400580e8c991cb061d3f57fa72\n"
    },
    {
      "commit": "b40b7e73469339a6b667b4a2e2b8690112a74dc9",
      "tree": "7e8a34d9c7894c4c946f674f19f0a0a512b95184",
      "parents": [
        "9690ad794b324ba54e936608881ac0f62538b97a"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Jan 25 17:11:07 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Jan 30 01:17:58 2018 -0800"
      },
      "message": "Make libdexfile build independent of runtime dir\n\nRemove libdexfile\u0027s dependency on utils.cc and move utf.cc into\n/dex.  Remove libdexfile\u0027s constituent sources from libart and\nuse libdexfile wherever libart is. Also remove some ART-specific\ninterfaces.  Libdexfile\u0027s tests remain to be converted, plus\nmoving the files to a new directory peer to runtime/.\n\nBug: 22322814\nTest: make -j 50 test-art-host\nChange-Id: Ifaf695216e4a0e43d3aa377984d933f7a2a243c2\n"
    },
    {
      "commit": "9e734c7ab4599d7747a05db0dc73c7b668cb6683",
      "tree": "dce1d1993734a947fb2e6f626eb1b425cb72143b",
      "parents": [
        "b496af808eaf3af5ebac50aef4fbec33323b5016"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Jan 04 17:56:19 2018 -0800"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Fri Jan 05 11:07:19 2018 -0800"
      },
      "message": "Create dex subdirectory\n\nMove all the DexFile related source to a common subdirectory dex/ of\nruntime.\n\nBug: 71361973\nTest: make -j 50 test-art-host\nChange-Id: I59e984ed660b93e0776556308be3d653722f5223\n"
    },
    {
      "commit": "4557b3858a66aa20e42bce937e1f0620aad880a2",
      "tree": "8f34d8f014b11f17c6351bb955fcc74c940b8d16",
      "parents": [
        "90f20973356900e340998e8e2b34230e5c4c8fb0"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 03 11:47:54 2018 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 03 12:45:40 2018 +0000"
      },
      "message": "ART: Rename Atomic::CompareExchange methods\n\nRenames Atomic::CompareExchange methods to Atomic::CompareAndSet\nequivalents. These methods return a boolean and do not get the witness\nvalue. This makes space for Atomic::CompareAndExchange methods in a\nlater commit that will return a boolean and get the witness value.\n\nThis is pre-work for VarHandle accessors which require both forms.\n\nBug: 65872996\nTest: art/test.py --host -j32\nChange-Id: I9c691250e5556cbfde7811381b06d2920247f1a1\n"
    },
    {
      "commit": "808c7a57bb913b13c22884f57cdacd59bf1fdb3f",
      "tree": "d7f0d7cabaac5a7646c25bae584a82a9aa279cc0",
      "parents": [
        "64bae9fb677aa0e2406d13ea9f8ebaa92e16f978"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Dec 15 11:19:33 2017 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Dec 22 09:41:17 2017 -0800"
      },
      "message": "Make CodeItem fields private\n\nMake code item fields private and use accessors. Added a hand full of\nfriend classes to reduce the size of the change.\n\nChanged default to be nullable and removed CreateNullable.\nCreateNullable was a bad API since it defaulted to the unsafe, may\nadd a CreateNonNullable if it\u0027s important for performance.\n\nMotivation:\nHave a different layout for code items in cdex.\n\nBug: 63756964\nTest: test-art-host-gtest\nTest: test/testrunner/testrunner.py --host\nTest: art/tools/run-jdwp-tests.sh \u0027--mode\u003dhost\u0027 \u0027--variant\u003dX32\u0027 --debug\n\nChange-Id: I42bc7435e20358682075cb6de52713b595f95bf9\n"
    },
    {
      "commit": "9310495f3bb601058a3b6dedc298ad9f5275510e",
      "tree": "14472899a051a890a429c687836e15407f76cb74",
      "parents": [
        "ed416f76ae679d92f0bc648581de2684ff93e29a"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Dec 13 17:13:15 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 14 17:11:22 2017 -0800"
      },
      "message": "ART: Factor out stack dumping with monitor objects\n\nFactor out generic stack walking with monitor object visitation into\nMonitorObjectsStackVisitor. Rewrite StackDumpVisitor in terms of this,\nremoving Monitor::DescribeWait on the way.\n\nBug: 70538431\nTest: m test-art-host\nTest: manual (SIGQUIT dumping)\nChange-Id: I6f359f9a5f665f308328ad466bc7a437f52aea24\n"
    },
    {
      "commit": "f3ebccef2fd375e8b06fc0f93ba8395a577a37bf",
      "tree": "7d160f13491f6a34074a459e9873433247d4990f",
      "parents": [
        "ba3a790338725a37ecd4cb314c4a6147e29aef38"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Dec 11 20:40:23 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 14 11:14:45 2017 -0800"
      },
      "message": "ART: Add Monitor::FetchState\n\nAdd a function returning descriptive state for a monitor. The\nfunction will return the thread state, and possible the object\nthe thread is blocked/waiting/sleeping on, as well as the lock\nowner\u0027s tid.\n\nRewrite DescribeWait to use this.\n\nIn preparation for new uses.\n\nBug: 70538431\nTest: m\nChange-Id: I79d0104ad04dec633522d4127542184a0cbdf95c\n"
    },
    {
      "commit": "170331f0e44a0e07fcfe0b5932517e0500f5cd1f",
      "tree": "4bb837aa3b6e19c898df23894beb61957885e985",
      "parents": [
        "39b378ca3b4b6dc6da1651b84ee4289cd9bff0f8"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 07 18:41:03 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Dec 07 18:41:03 2017 -0800"
      },
      "message": "ART: Remove base/logging from heap-inl.h\n\nHide the single uncommon VLOG and remove the include. Fix up\ntransitive includes.\n\nTest: m\nChange-Id: I917df597cb62c57040c1fb0e0079df4d95e5a658\n"
    },
    {
      "commit": "aaf0d38d9e3bd35aaf5ea2be6409bf2f3575f0ad",
      "tree": "a1eb3414c972f866b606dd1d11b3203640f30880",
      "parents": [
        "23f8f50ace964ed597261f19e87ac050f415957e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 27 14:10:21 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Nov 28 12:01:32 2017 -0800"
      },
      "message": "ART: Change lock dumping\n\nReturn dex registers as well as dex PCs from FindLocksAtDexPc.\n\nIt is necessary to return the registers as the register used for\na monitor-enter operation may be aliased and overwritten by the\ntime the requested dex PC is reached.\n\nIt is at this point necessary to return a set of registers as\noptimizations may have eliminated dead registers, and the verifier\nhas no notion of liveness.\n\nA client of FindLocksAtDexPc should not assume that all registers\ncan be successfully retrieved from a stack frame, with the possibility\nof none. Only a properly verified method (i.e., lock verification succeeded)\nimplies that at least one register should work for all locks held at\nany point in the program.\n\nBug: 68703210\nTest: art/test/testrunner/testrunner.py -b --host -t 167\nChange-Id: I9027787e395cf8df0e7699a606665edb2ecb5136\n"
    },
    {
      "commit": "5a387277465181ee76751fc07b36f7f4e4a2b35b",
      "tree": "230af932a63e8d33be7c71372f8a94b0b43f8c7c",
      "parents": [
        "39cfa34828620220e3bdba181b36712fdbcd2639"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 06 19:47:16 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 06 20:19:00 2017 -0800"
      },
      "message": "ART: Do not use proxy method as owner of lock\n\nDuring lock inflation, it is possible to see a proxy method on\ntop of the stack, e.g., when it is allocating its args array.\nHowever, proxy methods are not helpful for lock profiling, as\nthey do not contain specific caller data we could use.\n\nInstead, try to walk the stack for the proxy\u0027s caller method,\nand use that as the owner. This is acceptable as proxies can\nnever be synchronized methods (as interfaces methods aren\u0027t),\nand the caller frame cannot be a proxy method itself.\n\nAdd a test. But the repro rate is really low.\n\nBug: 68871592\nTest: m test-art-host\nChange-Id: I02cf38c7d05e2c963a5dc489c57b6dd8009dccd4\n"
    },
    {
      "commit": "71ae03b7a56ddb9c45e3a7edd690fe919af9f17a",
      "tree": "62e9ff8cf22629abc0b89ab6ec4db22b7477f6fa",
      "parents": [
        "f0536a524bfa750c91d458bf777e517287b50186",
        "5d6891446445497332986782f9490e949ecd55c9"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Oct 20 15:34:32 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 20 15:34:32 2017 +0000"
      },
      "message": "Merge \"ART: Increase lock contention thresholds in debug builds\""
    },
    {
      "commit": "5d6891446445497332986782f9490e949ecd55c9",
      "tree": "aff2c7ea53a0763b9a37272ff2c945264cb1b528",
      "parents": [
        "1b8376c8127c973377e7881afb1ae41a8cf812c1"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Oct 19 13:03:29 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Oct 19 13:22:50 2017 -0700"
      },
      "message": "ART: Increase lock contention thresholds in debug builds\n\nDebug builds are known-slower. To avoid the overhead of stack\ninspection, formatting and printing, increase the thresholds\ntenfold.\n\nBug: 35644369\nTest: m test-art-host\nChange-Id: Ica43a7c5123223c7c2d94a606d745f7aadad0259\n"
    },
    {
      "commit": "b1e31a8337b9cce2f3160a972123886b355dce27",
      "tree": "30413acc04bd03c385b3b6023e332ecc535ff4ee",
      "parents": [
        "8cdfac752808784d29185710095ad104922cd861"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Oct 04 16:57:36 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Oct 18 17:01:37 2017 -0700"
      },
      "message": "Change RequestSynchronousCheckpoint to release thread_list_lock_\n\nThe RequestSynchronousCheckpoint function in some cases needs to\nrelease the thread_list_lock_ as it waits for a checkpoint to be\nexecuted. This means that the thread being checkpointed might be\ndeleted. Previously it was not obvious this was the case since the\nthread_list_lock_ seemed to be held throughout the execution of the\nmethod.\n\nIn order to prevent bugs we make RequestSynchronousCheckpoint\nexplicitly release the thread_list_lock_ when executed, meaning code\nwill be aware that threads might die during its execution.\n\nBug: 67362832\nTest: ./test.py --host -j50\nChange-Id: I1cbdf7660096dc1908b0eeabc1062447307bc888\n"
    },
    {
      "commit": "848574ca50bb7e2d109608359d1086b3ca6bb4b3",
      "tree": "6a3d55ae8b66279c1e417c7c5116394613037ae8",
      "parents": [
        "9c0a6ce0a41eaf78f3fc3224fc34195601b6e0b3"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Sep 25 16:59:39 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Sep 28 12:56:13 2017 -0700"
      },
      "message": "Implement asynchronous exception support\n\nThis CL implements async exception support in the switch interpreter.\nIt also adds support for the MTerp to detect and switch back to the\nswitch interpreter in cases where an async exception is detected.\n\nTests follow in next CL.\n\nTest: ./test.py --host -j50\n\nBug: 62821960\nBug: 34415266\n\nChange-Id: Idb53711a40c20f962de8aa6b74662676b8bd25c6\n"
    },
    {
      "commit": "e2abbc604ce003c776c00ecf1293796bb4c4ac5a",
      "tree": "f7d124d1861cad2162c30dfe932bb4e1beaf41ef",
      "parents": [
        "7090dfe84f78b1928fcbdfd664d0dd9ea52633ff"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Sep 15 11:59:26 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 18 11:36:24 2017 -0700"
      },
      "message": "ART: Move kDexNoIndex to dex_file_types.h\n\nDefine the constant with the types to allow lowering the dependency\non DexFile.\n\nTest: m\nChange-Id: I3c61421db45be96d2057e01b1a7825883d8bd178\n"
    },
    {
      "commit": "77fee87b262e969b29a9ac121a8bcbf87b68d9ce",
      "tree": "3280ba8d887045217bfbcb81eb624f571eeee7d0",
      "parents": [
        "ec995142998f6c7371734e6df95b5e2c80b18d27"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Sep 05 14:51:49 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Sep 14 09:57:03 2017 -0700"
      },
      "message": "Add support for JVMTI monitor events.\n\nAdds support for the JVMTI can_generate_monitor_events capability and\nall associated events. This adds support for the\nJVMTI_EVENT_MONITOR_WAIT, JVMTI_EVENT_MONITOR_WAITED,\nJVMTI_EVENT_MONITOR_CONTENDED_ENTER, and\nJVMTI_EVENT_MONITOR_CONTENDED_ENTERED events.\n\nBug: 65558434\nBug: 62821960\nBug: 34415266\n\nTest: ./test.py --host -j50\n\nChange-Id: I0fe8038e6c4249e77d37a67e5056b5d2a94b6f48\n"
    },
    {
      "commit": "ce56864b347983155a6b810c19eaa8297d77be96",
      "tree": "c572198fee2fe2cc4b2291b7af124c5429e63f7e",
      "parents": [
        "82629c9182dffb823f05dec30f7ac72cf8fb3ba5"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Sep 05 16:54:25 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Sep 06 17:50:27 2017 -0700"
      },
      "message": "Add support for JVMTI GetObjectMonitorUsage function.\n\nAdds support for the can_get_monitor_info capability and all\nassociated functionality. Also fixes a minor bug where monitor info\nincorrectly said that an unlocked monitor had 1 entry in some cases.\n\nTest: ./test.py --host -j50\nTest: art/tools/run-jdwp-tests --mode\u003dhost\n\nBug: 62821960\nBug: 34409230\n\nChange-Id: I9a4817ea309aaf94c56e9c0a694b88c93e7b629c\n"
    },
    {
      "commit": "88fd720b6799184c8ad61e766a6d37af33ed30ef",
      "tree": "80e49456eafd44b0ad8790be456ae06949fcc506",
      "parents": [
        "1cba8d219331e4d6994359e8f9104e5db2c8f8a9"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jun 30 08:31:59 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jul 13 09:11:03 2017 -0700"
      },
      "message": "Add Jvmti Suspend/ResumeThread functions\n\nEnable the can_suspend jvmti capability and implement all required\nfunctionality associated with it.\n\nTest: ./test.py --host -j40\nBug: 34415266\nBug: 62821960\nBug: 63579748\n\nChange-Id: I83b92de7f81622e1658114b034918e8295805b6e\n"
    },
    {
      "commit": "46f9340f2a055a8fdfebbfbb739c697c20d83e7c",
      "tree": "acb172f74723e4ea9ac7ded73b94c661217ec90d",
      "parents": [
        "fe9a4f061841a3c597aac6817a47c799c54fcad7"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jun 29 11:59:50 2017 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Jun 30 14:24:56 2017 +0000"
      },
      "message": "Add SuspendReason enum and change Suspension functions.\n\nMore self-documenting and more type safe.\n\nBug: 62821960\nTest: ./test.py\nChange-Id: Ic7a1ae6a25e687d65f5aa10c1aad54a7b80dd086\n"
    },
    {
      "commit": "d0210e58100e029e865e783beb7906090781f602",
      "tree": "ace7eea3b27e97e3e01060ea1d0a6ef277a8f89f",
      "parents": [
        "a0e63dfbfe2f2513a709e94b8a1ac17418396fdf"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 23 13:38:09 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 23 15:51:11 2017 -0700"
      },
      "message": "ART: Add stack-dump mode for contention logging\n\nAdd a second threshold to contention logging. If this threshold\nis reached, log the owner and the contender thread to the logcat.\n\nRequires a bit of refactor in the contention logging code to hold\nthe locks correctly (different requirements for owner and contender).\nAdd -Xstackdumplockprofthreshold:ms to control the threshold value.\nAs with general contention logging, default to 0 \u003d off. Use ThreadStress\nwith --locks-only to get test coverage.\n\nBug: 62353392\nTest: m test-art-host\nChange-Id: I1b5a5130c4f908497ac06464130844f5ca42a5fb\n"
    },
    {
      "commit": "111b10957aee2c0f79310fcec4cff32eb90bf1c2",
      "tree": "043ef481eef7b7b9d4284860b58a66ef54b5ede6",
      "parents": [
        "19921b70fef519c644d56a6aeb7f82491ba1850c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 22 20:28:23 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 22 20:28:23 2017 -0700"
      },
      "message": "ART: Change contention logging lock strategy\n\nCompute possible contention (wrt/ sampling) first. Then keep the whole\nlogging section under the mutator lock *and* the thread-list lock so\nas to avoid any thread races.\n\nThis change is in preparation for heavier logging under heavy lock\ncontention.\n\nEnable contention logging in 004-ThreadStress.\n\nBug: 62353392\nTest: m test-art-host\nChange-Id: I7b9126bae273f0cddb681f5f013ce6d814c7b8c0\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": "a4c90b90f8a819c5b883a8e0d4ea7d5ad835f58a",
      "tree": "3659423a48f78f20b1a6752e48e162ba5cacadef",
      "parents": [
        "6559ba1cfb9d24fdca4b1b1ec9e0b8dc31679982",
        "39b98113c0e6765a68fb1bc3cd8fd98c858ce637"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jun 02 18:25:22 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 02 18:25:24 2017 +0000"
      },
      "message": "Merge \"ART: Move source owner data to LogContentionEvent\""
    },
    {
      "commit": "39b98113c0e6765a68fb1bc3cd8fd98c858ce637",
      "tree": "370dbf1f071fd79399081a4f51ec1cfd2caf9157",
      "parents": [
        "596c58b3dc73a4017d49af6c5037bbd7109fd31e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 01 16:28:27 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 01 16:34:07 2017 -0700"
      },
      "message": "ART: Move source owner data to LogContentionEvent\n\nChange the signature of Monitor::LogContentionEvent to take the\nowner\u0027s ArtMethod and dex pc instead of the derived data. Move the\ndecoding from monitor.cc to monitor_android.cc.\n\nThis change does not change functionality. It is only in preparation\nfor a later, actual change of what is being logged.\n\nBug: 62241642\nTest: m test-art-host\nChange-Id: I30f02eeecbc556f8eb7b637301ed8ac9b1e40a93\n"
    },
    {
      "commit": "513061a792b22c417c938d31c19581390709561c",
      "tree": "80b4fdce03711170626aa5640d07b07de4a326a1",
      "parents": [
        "38c4ae5f4c5a033b7a7441032f39ea58f5772d4c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 01 09:17:34 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jun 01 12:59:13 2017 -0700"
      },
      "message": "ART: Clean up thread.h and thread_list.h\n\nRemove dependency on stack.h and gc_root.h. Remove unused object\ncallbacks include. Factor out ManagedStack into its own set of files.\nFix up users of transitive includes.\n\nTest: m test-art-host\nChange-Id: I01286c43d8c7710948c161b1348faabb05922e59\n"
    },
    {
      "commit": "365719c23d809e595cf320bfba40e76bb4e87940",
      "tree": "0939f0d8dc47723978a665fa11dd637f6976d521",
      "parents": [
        "d6705a0586377f1b0d7d14d3abe2b270bb0adb18"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 08 13:11:50 2017 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue May 16 01:58:03 2017 +0100"
      },
      "message": "No need to lock when calling Thread.interrupted.\n\nAlso intrinsify the Thread.interrupted call.\n\nThe rationale behind this optimization is that the flag can only\nhave two values, and only self can set it to false.\n\nTest: libcore, jdwp, run-tests, 050-sync-test\nChange-Id: I5c2b43bf872ba0bfafcb54b2cfcd19181864bc4c\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": "a222404a5832ab16786931576d52825d08eed3ca",
      "tree": "7350e5efbb6ef72c33e82753d79f7f4bed92d9d4",
      "parents": [
        "1561de49b382627ddd277b8ad7e5e8f4cec32f0b"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Feb 08 16:35:45 2017 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Feb 10 16:15:01 2017 -0800"
      },
      "message": "Fix the empty checkpoint timeout.\n\nThe problem happens when a thread is indirectly blocked on a mutex\nthat another thread holds and is blocked on a weak ref access.\n\nAdd a way to do a dummy wakeup on a thread that\u0027s blocked on a mutex\nso that the thread will respond to the empty checkpoint request. Do\nthis for the mutexes that are expected to be held when a weak ref is\naccessed. Add a check that detects an unexpected case.\n\nBug: 33006388\nBug: 12687968\nTest: test-art-host.\nChange-Id: Iefec69b9a21aa25a928cb31fcf4fb872f867a8c2\n"
    },
    {
      "commit": "2702d56dc837256af90715200fd79b3cfde906ca",
      "tree": "98cd60eb7a072faa3c0cfd8a9cf212e521a79508",
      "parents": [
        "df04fda5638aa1fb9956808f1cd497b49f62088e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Feb 06 09:48:00 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Feb 06 12:40:03 2017 -0800"
      },
      "message": "ART: Fix systrace monitor logging deadlock\n\nMove the method logging earlier to avoid a deadlock due to re-acquiring\nthe mutator lock.\n\nBug: 34990215\nTest: m\nTest: Test on device\nChange-Id: Id8069b133d1408a659afadd7e265d5027ac55a39\n"
    },
    {
      "commit": "71cd68d36f024d6c8ccfc8bc9d196a8f86e6cf7d",
      "tree": "d59739ac2520f6d400c81631d8198c071723b7fa",
      "parents": [
        "7510dcb0435e6c3f1da1d329bde3cf0274bc7da8"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Jan 25 18:28:12 2017 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Jan 25 18:53:51 2017 -0800"
      },
      "message": "Avoid accessing the heap without mutator lock in Monitor::Lock.\n\nScopedThreadStateTransition doesn\u0027t do annotations and we are\naccidentally accessing the heap without holding the mutator lock in\nMonitor::PrettyContentionInfo. Use ScopedThreadSuspension instead.\n\nBug: 34674595\nTest: test-art-host\n\nChange-Id: If3ec86429ff99405ab14b3588f192ab1c0472cc8\n"
    },
    {
      "commit": "6fe97e0bcc82ae9b9a0ada5cac7eaebf74d130c3",
      "tree": "17ea0b64cf7e3f95252af1e95e4788d339f2c4e2",
      "parents": [
        "152b9567d0c2382464c844c91c2108608a1bc06f"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed May 04 18:35:57 2016 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Mon Jan 23 12:40:03 2017 -0800"
      },
      "message": "Add explicit monitor inflation run test.\n\nThis tests some of the same code as the monitor_pool_test\ngtest. But it tests a larger pool size with the code needed to\ninvoke it from the Java level.  Larger pool sizes have gotten\nmore interesting with the new monitor pool layout.\n\nAdd a function to return the size of the current MonitorList.\nCurrently this is only used by this test, but it is likely to\nhave debugging or performance analysis uses as well.\n\nTest: Passed on host and on angler.\n\nChange-Id: I4f3f150044a0d8c800eb60635e074119598cfdd1\n"
    },
    {
      "commit": "f1c6f8742e2ac980c7259f4dc70b4326ecc245e1",
      "tree": "27bdef2da9d0c37003c0859cc3e5a58ff26092e2",
      "parents": [
        "48ff5b9aecd9c9d3eb00242aee52a0a8193421df"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Jan 06 12:23:47 2017 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Jan 06 12:48:15 2017 -0800"
      },
      "message": "Don\u0027t need to block in AddWeakGlobalRef and MonitorList::Add under CC.\n\nCMS needs this to block because an object allocated during the GC\nwon\u0027t be marked and concurrent reference processing would incorrectly\nclear the JNI weak ref or the monitor list weak.\n\nBut CC doesn\u0027t because of the to-space invariant, that is, when a\nmutator tries to create a JNI weak ref or a monitor for an object, it\nmust be already marked and the concurrent reference processing\nwouldn\u0027t incorrectly clear it.\n\nBug: 34128900\nBug: 12687968\nTest: test-art-host with CC.\nChange-Id: Ia87bf8ed9e604900df5ecb450c89b0ac222bef32\n"
    },
    {
      "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": "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": "39ce7d2907edb978f1ab6cd75884be48ab11cd77",
      "tree": "7d2f0c56bd8a7dd483b5c1ede7047b623d0e35d7",
      "parents": [
        "5302bd999afee6db5b0cfd63e6a49b0fcbf92dd4",
        "3049324f4ef71b5d7a3de49bd77c75f07dbf8f3a"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Nov 11 18:44:44 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Nov 11 18:44:44 2016 +0000"
      },
      "message": "Merge \"Make empty checkpoint work while weak ref access is disabled.\""
    },
    {
      "commit": "3049324f4ef71b5d7a3de49bd77c75f07dbf8f3a",
      "tree": "19e2d9d5e8476bf526dd5924ef05b1d727b75f8b",
      "parents": [
        "e7b46e22c7f4f6f503501b3b2ad99113289d142b"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Nov 03 13:06:52 2016 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Nov 09 18:14:08 2016 -0800"
      },
      "message": "Make empty checkpoint work while weak ref access is disabled.\n\nFix a potential race on PushOntoMarkStack for CC by running an empty\ncheckpoint (while weak ref access is disabled).\n\nBug: 32508093\nBug: 12687968\nTest: test-art-host with CC/CMS, libartd boot with N9, Ritz EAAC.\nChange-Id: I3749bb525e7734804307ee16262355f3fc730312\n"
    },
    {
      "commit": "1cf194f055b7152fde817787fcdadeea1fb1067c",
      "tree": "b47da959af7a1f0138d92fe9989ae299462fed96",
      "parents": [
        "77a0e4541a29c26dba21ed8c1ed1c29ef8d0ce4c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Nov 01 20:13:24 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 02 14:27:06 2016 -0700"
      },
      "message": "Check for forwarding address in READ_BARRIER_MARK_REG\n\nWhen the object is in the from-space, the mark bit is not set.\nIn this case, we can also check the lock word for being a forwarding\naddress. The forwarding address case happens around 25% of the time.\nThis CL adds the case for forwarding address lock words to\nREAD_BARRIER_MARK_REG.\n\nReduces total read barriers reaching runtime on ritzperf:\nSlow paths: 20758783 -\u003e 15457783\n\nDeleted the mark bit check in MarkFromReadBarrier since most of the\ncallers check the bit now.\n\nPerf:\nReadBarrier::Mark: 2.59% -\u003e 2.12%\nart_quick_read_barrier_mark_reg01: 0.79% -\u003e 0.78%\nart_quick_read_barrier_mark_reg00: 0.54% -\u003e 0.50%\nart_quick_read_barrier_mark_reg02: 0.31% -\u003e 0.25%\n\nOnly X86_64 for now, will do other archs after.\n\nBug: 30162165\n\nTest: test-art-host\n\nChange-Id: Ie7289d684d0e37a887943d77710092e380457860\n"
    },
    {
      "commit": "709b070044354d9f47641f273edacaeeb0240ab7",
      "tree": "3a8ac051d7c35076303984d0d892cdd396b60427",
      "parents": [
        "1a4de6a2453a3ad0310aca1a44e7e2d3b6f53bc1"
      ],
      "author": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Thu Oct 13 09:12:37 2016 -0700"
      },
      "committer": {
        "name": "David Sehr",
        "email": "sehr@google.com",
        "time": "Tue Oct 18 14:10:04 2016 -0700"
      },
      "message": "Remove mirror:: and ArtMethod deps in utils.{h,cc}\n\nThe latest chapter in the ongoing saga of attempting to dump a DEX\nfile without having to start a whole runtime instance.  This episode\nfinds us removing references to ArtMethod/ArtField/mirror.\n\nOne aspect of this change that I would like to call out specfically\nis that the utils versions of the \"Pretty*\" functions all were written\nto accept nullptr as an argument.  I have split these functions up as\nfollows:\n1) an instance method, such as PrettyClass that obviously requires\nthis !\u003d nullptr.\n2) a static method, that behaves the same way as the util method, but\ncalls the instance method if p !\u003d nullptr.\nThis requires using a full class qualifier for the static methods,\nwhich isn\u0027t exactly beautiful.  I have tried to remove as many cases\nas possible where it was clear p !\u003d nullptr.\n\nBug: 22322814\nTest: test-art-host\nChange-Id: I21adee3614aa697aa580cd1b86b72d9206e1cb24\n"
    },
    {
      "commit": "7b08ae49a134458504367c3e9fa5fe080db3b89c",
      "tree": "f8431c8cb026a66784c1d61d92a8e2fb1af9daea",
      "parents": [
        "d74bd3a9a48d34d7321f7de7a6f8e1d3467be58a"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Oct 04 15:20:36 2016 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Oct 04 15:21:58 2016 -0700"
      },
      "message": "Fix a CC crash with ThreadStress.\n\nAdd a read barrier on the locked object in Monitor::DescribeWait().\n\nBug: 31848261\nBug: 12687968\nTest: test-art-host with CC and N9 libartd boot.\nChange-Id: I569e1499c2aadf54d9074a8a790e5d512c2dad4f\n"
    },
    {
      "commit": "0795f23920ee9aabf28e45c63cd592dcccf00216",
      "tree": "ff3f880c5e84f3316532b47d0e9a7729ade848ac",
      "parents": [
        "d1224dce59eb0019507e41da5e10f12dda66bee4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Sep 27 18:43:30 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 29 17:31:09 2016 -0700"
      },
      "message": "Clean up ScopedThreadStateChange to use ObjPtr\n\nAlso fixed inclusion of -inl.h files in .h files by adding\nscoped_object_access-inl.h and scoped_fast_natvie_object_access-inl.h\n\nChanged AddLocalReference / Decode to use ObjPtr.\n\nChanged libartbenchmark to be debug to avoid linkage errors.\n\nBug: 31113334\n\nTest: test-art-host\n\nChange-Id: I4d2e160483a29d21e1e0e440585ed328b9811483\n"
    },
    {
      "commit": "3fec9ac0d5af1358d216eb2fdc2000ec0205f3f0",
      "tree": "f38d8d8aae51f53e7ee6b474f47597b784fc2316",
      "parents": [
        "0cfe19af3b7395658210ea6044a65c9811962a7a"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Sep 13 10:47:28 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Sep 26 10:59:22 2016 -0700"
      },
      "message": "ART: Use libbase logging\n\nMove most of our logging infrastructure over to system/core/base.\nRetain VLOG.\n\nUsing unified Android infrastructure has two main advantages. First,\nit reduces the complexity/maintenance burden in ART. Second, it\nallows to detach logging for the cases where we do not want or need\na runtime, e.g., dexdump, the disassembler, etc. As a part of the\nlatter, libbase is also supported for all hosts (including Windows).\n\nFrom a developer viewpoint, there are minor behavior changes for the\nLOG statements (see above), but otherwise usage is the same. Explicit\nseverity enum items are in the android::base namespace now.\n\nBug: 31338270\nTest: m test-art-host\nChange-Id: I5abcb2f45f5b03d49951874c48544f72a283a91b\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": "36a270ae4f288e49493432b7128f899ad579849e",
      "tree": "99f134bbfe111b1c42b1b0c19d8b65175a3e6fc8",
      "parents": [
        "89bd8358c0a69e8cd6456d81d88ef366e261f732"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 28 18:08:51 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Aug 03 15:46:18 2016 -0700"
      },
      "message": "Change one read barrier bit to mark bit\n\nOptimization to help slow path performance. When the GC marks an\nobject through the read barrier slow path. The GC sets the mark bit\nin the lock word of that reference. This bit is checked from the\nassembly entrypoint the common case is that it is set. If the bit is\nset, the read barrier knows the object is already marked and there is\nno work to do.\n\nTo prevent dirty pages in zygote and image, the bit is set by the\nimage writer and zygote space creation.\n\nEAAC score (lower is better):\nN9: 777 -\u003e 700 (average 31 of runs)\nN6P (960000 mhz): 1737.48 -\u003e 1442.31 (average of 25 runs)\n\nBug: 30162165\nBug: 12687968\n\nTest: N9, N6P booting, test-art-host, test-art-target all with CC\n\nChange-Id: Iae0cacfae221e33151d3c0ab65338d1c822ab63d\n"
    },
    {
      "commit": "4b0ef1c980a1f3b0201d77e33bdb2f7df12c9114",
      "tree": "4b8891beab013872144d69f97e918f9914aaf8c8",
      "parents": [
        "7707777f064e9e0aa53c40c189045ab2ea4301ee"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jul 29 16:26:01 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jul 29 17:54:09 2016 -0700"
      },
      "message": "Revert \"Revert \"Use try lock to fix class resolution race\"\"\n\nFix possible deadlock in EnsureResolved caused by interaction with\nGC. Since we were sleeping while holding the mutator lock, it could\nblock thread suspension. This would deadlock if the thread that\nhad locked h_class is already suspended since we would spin forever\nand not make progress.\n\nBug: 27417671\nBug: 30500547\n\nTest: test-art-host ART_TEST_GC_STRESS\u003dtrue\n\nThis reverts commit 69bf969c055c31a75d17ea92aeee756042678114.\n\nChange-Id: Id8750df065dc3b9ef7dc874f2eb2cc2c58e5d1eb\n"
    },
    {
      "commit": "69bf969c055c31a75d17ea92aeee756042678114",
      "tree": "3132e2e1e5b1f1af558652d9b39eeb6c994ec256",
      "parents": [
        "a704eda0078989a73cac111ed309aca50d2e289b"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jul 29 20:06:45 2016 +0000"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jul 29 20:12:48 2016 +0000"
      },
      "message": "Revert \"Use try lock to fix class resolution race\"\n\nThis reverts commit a704eda0078989a73cac111ed309aca50d2e289b.\n\nBug: 27417671\nBug: 30500547\nChange-Id: Ieea05236b9e61c722660cd9497c9d55d13ccd010\n"
    },
    {
      "commit": "a704eda0078989a73cac111ed309aca50d2e289b",
      "tree": "07fd076b3ea6f86bfea71e4c6707fd301f108db5",
      "parents": [
        "9755c262df1be7f5d5b98d038c8fd3734e974f9d"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 13 09:53:35 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 27 14:37:42 2016 -0700"
      },
      "message": "Use try lock to fix class resolution race\n\nThere was some possible deadlocks related to EnsureResolved caused by\nacquiring an object lock.\n\nScenario:\nThread 1 acquires lock on obj1\nThread 1 begins to resolve / initialize class1\nThread 1 blocks since it sees that class1 is already being resolved and\ngets preempted before it can acquire the object lock on class1\nThread 2 finishes resolving and initializing class1 and locks class1\nThread 2 blocks attempting to lock obj1\nThread 1 blocks attempting to lock class1\nDeadlock\n\nFixed the deadlock by changing EnsureResolved to use a try lock for the\nunresolved case.\n\nAdded a test.\n\nTest: Device boot, test-art-host, monitor_test\n\nBug: 27417671\nChange-Id: Ic6e1c3ca6f45490cf8a7bf8e137dee71ac83ff64\n"
    },
    {
      "commit": "c6df1e3cbfa7313007ee5fd4a5a6657a28627313",
      "tree": "13042081c7e5a784a90422c759e9b73e5cc9b013",
      "parents": [
        "19c10147cd5f3270c8604d06c4a0e05cbc49e2f1"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 04 10:15:47 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 04 16:40:51 2016 +0100"
      },
      "message": "Never go to resolution while inspecting inlined frames.\n\nInstead, do a manual inspection and decoding of the invoke\nwith the dex cache.\n\nAlso update oatdump to dump types in the dex cache.\n\nbug:27858645\nChange-Id: I7c0b612ee96e6865fa438c3a1d253686231337bd\ntest:run-test\n"
    },
    {
      "commit": "6e759ad477a30e09cce8ca59ed30180aceb8aff6",
      "tree": "5df26346612113c1a53d5b991d81a263fb7f2f3b",
      "parents": [
        "7463820747549be5d2babf93bb16ac739c053ce9"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 17 10:13:10 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 17 21:23:04 2016 -0700"
      },
      "message": "ART: Fix systrace monitor logging\n\nThinlock unlocking was incorrectly unconditionally ending a block.\n\nBug: 28423466\n\n(cherry picked from commit 825ab1c3f44fd84e5967f023c2dd8d36c6906f08)\n\nChange-Id: Ifaebd9e959041e157e292d4cba05675a37e9c700\n"
    },
    {
      "commit": "9d05b59a8595cf7eeece1795eb65b6b8706aad45",
      "tree": "508e0f3db0d605f312ac6d1d6cb4b24498cff46e",
      "parents": [
        "bf80a0678e9c0cfda87deffac5012cb69956e6dc",
        "764946701593bcf79560ab5aace501f915e12bae"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Apr 30 00:08:08 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Apr 30 00:08:08 2016 +0000"
      },
      "message": "Merge changes I6942bc86,Ie67e4aa9\n\n* changes:\n  ART: Fix Mac build\n  ART: Log all monitor operations to systrace\n"
    },
    {
      "commit": "c7ed09bd5d6f2c7af3bcba1c39b3f9185af68796",
      "tree": "bfad0c9f5236cc4d158bc0c64d5ef645ce09d283",
      "parents": [
        "0f35e0b26d8c7738ca7b284357afa9dafb659d47"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Apr 25 20:08:55 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 29 16:06:14 2016 -0700"
      },
      "message": "ART: Log all monitor operations to systrace\n\nAdd a VLOG option (\"-verbose:systrace-locks\") to log all monitor\noperations to systrace. This requires non-fastpath thread\nentrypoints, and ATRACE tags for locking and unlocking.\n\nDo a bit of cleanup to the entrypoint initialization to share\ncommon setup.\n\nBug: 28423466\n\n(cherry picked from commit fc6898769ae1ef91ec3e41c0a273401213cb82cd)\n\nChange-Id: Ie67e4aa946ec15f8fcf8cb7134c5d3cff0119ab3\n"
    },
    {
      "commit": "36891febf59f156c89ca86859bd8339947dc8baf",
      "tree": "2b2581890fc689794168df628e3e864eb1349818",
      "parents": [
        "64d91c609d039cef1c3c0a5c1561d44c362e7682"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Apr 28 17:21:08 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 29 10:56:22 2016 -0700"
      },
      "message": "Add contender method for lock contention\n\nNow prints the method that is attempting to acquire the lock.\n\nBug: 28223501\n\n(cherry picked from commit 8f26411287cddd983df6f1d00dbc3841767c123d)\n\nChange-Id: Ia130a525c8415defec36b2e23f358d18aac079ad\n"
    },
    {
      "commit": "0ffdc9ce0e6b47c56671d5f5c0b16a4d65648703",
      "tree": "40df60e6c5fb58754c8e2ce57b7fddc07b696aa7",
      "parents": [
        "a584db5460a31198bf621cdacf5bc304a984efa4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Apr 19 13:46:03 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 20 09:24:51 2016 -0700"
      },
      "message": "Do less work holding thread list lock\n\nAvoid doing stuff that requires access java heap like PrettyMethod.\nFixes lock violation.\n\nBug: 28268478\n\n(cherry picked from commit dee19e3caaeb5666055842d656dc0516b901f30c)\n\nChange-Id: Ie090879690df7a6db15a9c8b7e82f3809450d653\n"
    },
    {
      "commit": "49c882b2579d641abb4d373fd833d364429ef6e0",
      "tree": "4287d0d3bf5f2a6abd7cae8c1ee6cbc1159ec0ed",
      "parents": [
        "ec2ca59f111ffd957f152e1c9040236203b9859e"
      ],
      "author": {
        "name": "Goran Jakovljevic",
        "email": "Goran.Jakovljevic@imgtec.com",
        "time": "Tue Apr 19 10:27:21 2016 +0200"
      },
      "committer": {
        "name": "Goran Jakovljevic",
        "email": "Goran.Jakovljevic@imgtec.com",
        "time": "Tue Apr 19 11:36:49 2016 +0200"
      },
      "message": "Initialize a variable to suppress compiler error\n\nGCC (mips32 Buildbot) is complaining about the possibility of\nuninitialized usage.\n\nChange-Id: I217aa371189e06bed498288bf40e85406806c5ff\n"
    },
    {
      "commit": "61b3cd45c5e3a5c24f7ccce94843a718375f9b7a",
      "tree": "fc71e27e0ddf6be1f672b69524b7ee978fd9d29c",
      "parents": [
        "74b3c8f3850c2e4a7b17e9821ad78b59e6f8e047"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Apr 18 11:43:29 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Apr 18 15:29:53 2016 -0700"
      },
      "message": "Prevent holding stale Thread pointers\n\nIt is only really safe to hold non-self Thread* if you hold the\nthread list lock. Changed a few places to use thread ids instead\nof Thread.\n\nBug: 28223501\n\n(cherry picked from commit 81c170fede9af9174aba71428334ac8f366a4b4f)\n\nChange-Id: I15e50b699303a5c3739e4d19c153dd306e2ee504\n"
    },
    {
      "commit": "74b3c8f3850c2e4a7b17e9821ad78b59e6f8e047",
      "tree": "8bed7825cb0cc97e5926f7020b0d7f4f1266a377",
      "parents": [
        "c4d445a40bf00ab497b5e4d43a6b43eaafb5fa50"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 15 19:11:45 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Apr 18 15:29:41 2016 -0700"
      },
      "message": "Add more info to monitor contention logging\n\nPrint owner thread name and tid. Print blocking file name and line\nnumber.\n\nBug: 28223501\n\n(cherry picked from commit dc3c630ffdb3487bc46d878bf89c886f8ee69ef3)\n\nChange-Id: I8777837df1433462878f29842f0aede330dd46c0\n"
    },
    {
      "commit": "b2771b41a956b50266d4d83fbb067f99faf7b7dc",
      "tree": "797b73b8b97c496938a9f6bc498d75911b1ff3c9",
      "parents": [
        "f9eed16e175f8c7cb37d878acc772d653b07101e"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Apr 07 17:09:25 2016 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 13 12:42:29 2016 +0100"
      },
      "message": "Add option to tune sample collection based on thread sensitivity\n\nBug: 28065407\nBug: 27865109\n\nChange-Id: Icdb89f8f8874a41c07e73185523d18e8956620d3\n"
    },
    {
      "commit": "daed5d81e2fdb9d1e03ee6c34567347b92dcfb22",
      "tree": "f27fb31f3ad5d6dc0a45f025fedf98c1a011c069",
      "parents": [
        "8e213515077e11acdd664ec4a770a73e2f804863"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 10 10:49:35 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 10 11:42:11 2016 -0800"
      },
      "message": "Allocate interrupted exception before re-acquiring lock\n\nAllocating the monitor exception after acquiring the lock can cause\na deadlock in the following scenario:\n\nReference queue daemon interrupted from wait() on\nReferenceQueue.class. Tries to allocate exception and starts a GC\nthat blocks on WaitForGcToComplete.\n\nSome other thread is already doing a GC, and tries to enqueue the\ncleared refereneces. This deadlocks trying to lock Reference.class\nin ReferenceQueue.add.\n\nBug: 27508829\nChange-Id: Icbc18b6b8d1e906c3f7413810d6cefdda06eb921\n"
    },
    {
      "commit": "32ce2adefb8a3d0eda59a29f5e87c1eb43eef796",
      "tree": "50aaa40b31ede355359765259edc7989485cc7d5",
      "parents": [
        "c71dc3852edfa8e0cd2083d12845ff8607e189ff"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 04 14:58:03 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 04 18:37:19 2016 -0800"
      },
      "message": "Add more systracing everywhere\n\nAdded to:\nJIT\nDexFile functions\nOat file manager\n\nAdded helper ScopedTrace to prevent errors and reduce excess code.\n\nBug: 27502458\n\n(cherry picked from commit dabdc0fe183d4684f3cf4d70cb09d318cff81b42)\n\nChange-Id: Ifaeff8913d79eefc797380987d13cc00456266f8\n"
    },
    {
      "commit": "328c5dc0d178632125f5a05002051a6adc04766a",
      "tree": "843e9b7a71ff0875bf477cc052d921141a6828ef",
      "parents": [
        "5165b6ba1fda85d769c5092a65f07bcfffb0b3e7"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Nov 11 16:13:57 2015 -0800"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Nov 11 18:05:30 2015 -0800"
      },
      "message": "Get class loader to remember interrupts\n\nBug: 25606036\n\nMonitor::Wait should not reset the interrupt flag unless it actually\nthrows the exception.\n\nChange-Id: Id6a35c888160043831f30055f9bd39e7f0440439\n"
    },
    {
      "commit": "0f7c93322e50ff53eeba6b9ae13cf73eb0617587",
      "tree": "5a155089bb26311f690a3440825767bb125a0fc9",
      "parents": [
        "55a77ef5f99c2b056eb5f2820c1ff3b29c0ec270"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Nov 05 15:57:30 2015 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Nov 05 18:27:17 2015 +0100"
      },
      "message": "Minor cleanup of Monitor::VisitLocks\n\nUses the Instruction class to not bother with the decoding logic.\n\nChange-Id: Id1501b57129084014f05e41513319639a630361d\n"
    },
    {
      "commit": "b8b3702f6818443cd5535419d97ad106b8623c89",
      "tree": "e1e2a4adafa08359e8d2c15fe2a83e45c1f030b4",
      "parents": [
        "7dae1918d25ea2ad6b5ba166f44472d82c53fa5e",
        "eaa4609574267771f2080cbaa3dbe26da709b6f6"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Oct 15 15:55:56 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Oct 15 15:55:56 2015 +0000"
      },
      "message": "Merge \"Fix monitor contention logging to support negative line numbers\""
    },
    {
      "commit": "2d096c94fbd3fd2470b8ac1a0da6f577b3f69f42",
      "tree": "b3b9fd96064c57a6e883ce2cb4996a08aab336ec",
      "parents": [
        "b2d2d6ae8ad3dcec77bbaf99589cd98a4797f4f3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 12 16:18:20 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 13 08:14:46 2015 -0700"
      },
      "message": "Fix moving GC bugs in MonitorEnter and MonitorExit\n\nFixes test 088 with gcstress mode.\n\nChange-Id: Iaeb91f62f22233e403e97e954bfdc8dc367e63c8\n"
    },
    {
      "commit": "eaa4609574267771f2080cbaa3dbe26da709b6f6",
      "tree": "f1d44562808c89b615929e130adf2b1a0b9cad1b",
      "parents": [
        "7f9558eea5ffae184556ac13b93edf48371b41f8"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Oct 07 21:29:28 2015 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Oct 07 22:04:43 2015 -0700"
      },
      "message": "Fix monitor contention logging to support negative line numbers\n\nBug: 24743369\nChange-Id: I8dd4f59e0bd27aa4daa1d79a412fc7821c070c67\n"
    },
    {
      "commit": "f1d666e1b48f8070ef1177fce156c08827f08eb8",
      "tree": "772cbbe6652b32ea2be31532156295db27579390",
      "parents": [
        "897ce64153e4758663e464fb5fb339f9a7b496c8"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 03 16:13:34 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Sep 03 17:33:19 2015 -0700"
      },
      "message": "Add ScopedThreadSuspension\n\nFixes the TransitionFromRunnableToSuspended and\nTransitionFromSuspendedToRunnable pattern that was prone to errors.\n\nChange-Id: Ie6ae9c0357c83b4fc4899d05dfa0975553170267\n"
    },
    {
      "commit": "fdbd13c7af91a042eda753e436eeebf0e1937250",
      "tree": "c1fb370c9a4a30b9e589802c9c75dcc4919fc6e9",
      "parents": [
        "fe3879e6011f629d0dd6b04fab00b9496bd4ea08"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Sep 02 16:16:58 2015 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Sep 03 10:45:21 2015 -0700"
      },
      "message": "Some fixes for the CC collector.\n\n- Remove a DCHECK in DisableMarkingCheckpoint, which caused\n  occasional (false) failures.\n- Check the thread-local GetWeakRefAccessEnabled in boxed lambdas weak\n  access.\n- Add missing BroadcastForNewAllocationRecords and\n  BroadcastForNewWeakBoxedLambdas. The lack of the former caused\n  occasional deadlocks in the ddmc test.\n- Remove the \u0027ensure system weaks disallowed\u0027 calls, which weren\u0027t\n  useful and dead.\n\nBug: 12687968\nChange-Id: I33850c8d12e6e1a3aed1c2bb18eba263cbab76e8\n"
    },
    {
      "commit": "90443477f9a0061581c420775ce3b7eeae7468bc",
      "tree": "8c74b81dfae162e0fd0ccf8d5ac50827ba815174",
      "parents": [
        "6078aec213dfaf111c29969706e8e5967cfc9bea"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 16 20:32:27 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 22 15:13:56 2015 -0700"
      },
      "message": "Move to newer clang annotations\n\nAlso enable -Wthread-safety-negative.\n\nChanges:\nSwitch to capabilities and negative capabilities.\n\nFuture work:\nUse capabilities to implement uninterruptible annotations to work\nwith AssertNoThreadSuspension.\n\nBug: 20072211\n\nChange-Id: I42fcbe0300d98a831c89d1eff3ecd5a7e99ebf33\n"
    },
    {
      "commit": "97509954404d031594b2ecbda607314d169d512e",
      "tree": "bb5371ba90d52e2f561b1dc6959584857cb84683",
      "parents": [
        "c6f3439b67962584cfb764133e192c3317f0e1fc"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jul 13 14:35:43 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jul 14 16:45:27 2015 -0700"
      },
      "message": "Clean up GC callbacks to be virtual methods\n\nChange-Id: Ia08034a4e5931c4fcb329c3bd3c4b1f301135735\n"
    },
    {
      "commit": "0b71357fb52be9bb06d35396a3042b4381b01041",
      "tree": "44b8d6b0ca4a71f33cda55068fa9e14864c55625",
      "parents": [
        "0e87d1809443d41b431ce3a686b4e074df2d7b8b"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Jun 16 18:29:23 2015 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Jul 13 15:50:20 2015 -0700"
      },
      "message": "Thread-local mark stacks for the CC collector.\n\nThread-local mark stacks are assigned to mutators where they push\nreferences in read barriers to reduce the (CAS) synchronization cost\nin a global mark stack/queue.\n\nWe step through three mark stack modes (thread-local, shared,\nGC-exclusive) and use per-thread flags to disable/enable system weak\naccesses (only for the CC collector) instead of the existing global\none to safely perform the marking phase. The reasons are 1)\nthread-local mark stacks for mutators need to be revoked using a\ncheckpoint to avoid races (incorrectly leaving a reference on mark\nstacks) when terminating marking, and 2) we can’t use a checkpoint\nwhile system weak accesses are disabled (or a deadlock would\nhappen). More details are described in the code comments.\n\nPerformance improvements in Ritzperf EAAC: a ~2.8% improvement\n(13290-\u003e12918) in run time and a ~23% improvement (51.6s-\u003e39.8s) in\nthe total GC time on N5.\n\nBug: 12687968\nChange-Id: I5d234d7e48bf115cd773d38bdb62ad24ce9116c7\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": "80afd02024d20e60b197d3adfbb43cc303cf29e0",
      "tree": "ef054c7b4f2a739f7cf063e0bc4c501c2c7e41b5",
      "parents": [
        "559b178e34c5d92e7932f92e5d8a981ac334606f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 19 18:08:00 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 26 15:59:02 2015 +0100"
      },
      "message": "ART: Clean up arm64 kNumberOfXRegisters usage.\n\nAvoid undefined behavior for arm64 stemming from 1u \u003c\u003c 32 in\nloops with upper bound kNumberOfXRegisters.\n\nCreate iterators for enumerating bits in an integer either\nfrom high to low or from low to high and use them for\n\u003carch\u003eContext::FillCalleeSaves() on all architectures.\n\nRefactor runtime/utils.{h,cc} by moving all bit-fiddling\nfunctions to runtime/base/bit_utils.{h,cc} (together with\nthe new bit iterators) and all time-related functions to\nruntime/base/time_utils.{h,cc}. Improve test coverage and\nfix some corner cases for the bit-fiddling functions.\n\nBug: 13925192\nChange-Id: I704884dab15b41ecf7a1c47d397ab1c3fc7ee0f7\n"
    },
    {
      "commit": "2cebb24bfc3247d3e9be138a3350106737455918",
      "tree": "d04d27d21b3c7733d784e303f01f873bb99e7770",
      "parents": [
        "1f02f1a7b3073b8fef07770a67fbf94afad317f0"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Apr 21 16:50:40 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Apr 22 12:44:27 2015 -0700"
      },
      "message": "Replace NULL with nullptr\n\nAlso fixed some lines that were too long, and a few other minor\ndetails.\n\nChange-Id: I6efba5fb6e03eb5d0a300fddb2a75bf8e2f175cb\n"
    },
    {
      "commit": "15b9d5274399736ac09705f0507df24fac4f00c1",
      "tree": "04564a9265f5dccefdd32ea7bdd25adc0267f80b",
      "parents": [
        "8bc616d09f93523f4bc982cc60c377b00161522a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 12 15:05:13 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 13 10:26:47 2015 +0000"
      },
      "message": "API change in StackVisitor::GetVReg*.\n\n- Remove GetVReg() and SetVReg() that were expecting to always succeed.\n- Change Quick-only methods to take a FromQuickCode suffix.\n- Change deopt to use dead values when GetVReg does not succeed:\n  the optimizing compiler will not have a location for uninitialized\n  Dex registers and potentially dead registers.\n\nChange-Id: Ida05773a97aff8aa69e0caf42ea961f80f854b77\n"
    }
  ],
  "next": "0aa50ce2fb75bfc2e815a0c33adf9b049561923b"
}
