)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "0aa50ce2fb75bfc2e815a0c33adf9b049561923b",
      "tree": "9a3f9603ab30d5cbc7fc21aee0ceb48bbb0dd25a",
      "parents": [
        "e8e42f3548fd894f860912bb1b71ce6fa2d7daf3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 10 11:03:29 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 10 14:51:11 2015 +0000"
      },
      "message": "Remove ThrowLocation.\n\nNote that this is a cleanup change, and has no functionality change.\nThe ThrowLocation had no use anymore.\n\nChange-Id: I3d2126af1dc673cec3a0453ff3d56a172663a5f6\n"
    },
    {
      "commit": "14691c5e786e8c2c5734f687e4c96217340771be",
      "tree": "7c2156671b323c70ffdd1d48d5e2f1d1de79c5fc",
      "parents": [
        "3d7d2af4c6502b771b032ee9bf3ab30e78f9c60d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 05 10:40:17 2015 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 09 10:09:33 2015 +0000"
      },
      "message": "Compute the right catch location for the debugger.\n\nAlso remove tls ThrowLocation, it is not needed anymore.\n\nChange-Id: I78fddf09ce968ca475e39c17fa76d699c589c8d9\n"
    },
    {
      "commit": "e15ea086439b41a805d164d2beb07b4ba96aaa97",
      "tree": "465ee3780acd8b7cb35c8a7f42a1f3c5df3d26ec",
      "parents": [
        "0b25c71ac93fb10c484dbacb9e23db505a8e2353"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Feb 09 17:11:42 2015 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Mar 03 17:33:18 2015 -0800"
      },
      "message": "Reserve bits in the lock word for read barriers.\n\nThis prepares for the CC collector to use the standard object header\nmodel by storing the read barrier state in the lock word.\n\nBug: 19355854\nBug: 12687968\nChange-Id: Ia7585662dd2cebf0479a3e74f734afe5059fb70f\n"
    },
    {
      "commit": "2cd334ae2d4287216523882f0d298cf3901b7ab1",
      "tree": "b72d3d07e5a04151caca96cae345075b6e4452b0",
      "parents": [
        "604e2828896fbb8663897d1e75112da7305ead4c"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Jan 09 14:03:35 2015 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Jan 23 14:07:32 2015 -0800"
      },
      "message": "More of the concurrent copying collector.\n\nBug: 12687968\nChange-Id: I62f70274d47df6d6cab714df95c518b750ce3105\n"
    },
    {
      "commit": "4936159997132d7706d9700c646f35ef0283df4b",
      "tree": "5c46890e666b8d74baed83a6de6429e495c9e2a0",
      "parents": [
        "40d9c6a2339a1610764c0266061e3a6040e64726"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 22 16:36:10 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 22 16:38:03 2015 -0800"
      },
      "message": "Fix compaction unsafe DescribeWait\n\nFixes a crash that was seen once in automated tests, PrettyTypeOf\nwas accessing a stale object which had moved during IdentityHashCode\ndue to thin lock inflation causing suspension.\n\nChange-Id: I105aa9a09d4e8c9091b9a60e508ef71e613f1eed\n"
    },
    {
      "commit": "e6a8eec3a5db28de7d5db6d78e38033b80740e49",
      "tree": "a87d70ae8935be1a9ad90a718d977a9169936fbd",
      "parents": [
        "af56baf94d0573df89b97f441df7ff4dea42786e"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jan 06 14:17:57 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jan 06 14:25:27 2015 -0800"
      },
      "message": "Fix frequent gcstress ThreadStress crash\n\nCalling IdentityHashCode before PrettyTypeOf was causing occasional\nstale root errors since IdentityHashCode can cause thread suspension.\n\nCleaned up VisitLocks.\n\nBug: 18766916\nChange-Id: I7679539877e48a8c9aadb8a34718404ebce98d25\n"
    },
    {
      "commit": "f0dc8b5519102b3d3e738aed846975ae4239421e",
      "tree": "cf6c6b20c12e79595fc680f5da6de5575a6ea80f",
      "parents": [
        "3e2f0fc584463e9da1142a5011ac3f7bcf083e0f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Dec 17 10:13:30 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Dec 17 11:08:15 2014 -0800"
      },
      "message": "Add systrace events to monitors and thread suspension\n\nAdded systrace events to SuspendThreadByPeer, SuspendThreadByThreadId\nand monitor contention.\n\nBug: 18379850\nBug: 17470248\nChange-Id: I29eaf97c67361a6c6b437940b8729600d78696df\n"
    },
    {
      "commit": "4ad5cd3e7d519484559ef778d96fb3f0be8919fa",
      "tree": "9870938a0552b4fe472d9994a55a3bf761fc69d5",
      "parents": [
        "741e287b60136db49ecf8da72f2b5ca48b0a39bd"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Nov 11 23:08:07 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Nov 12 15:29:12 2014 -0800"
      },
      "message": "Modify the behavior of thread suspend shootouts.\n\nThe thread doing the suspension doesn\u0027t attempt to suspend the other thread\nunless it knows another thread isn\u0027t trying to suspend it. Use the suspend\ncount, and its lock, for this purpose.\nRe-enable ThreadStress test.\nBug: 15446488\n\nChange-Id: Idd34410c7b89d8abd6973e5699a15ca699472c78\n"
    },
    {
      "commit": "ae1a434fa1740791ba479da668e8372ca3dcb2a6",
      "tree": "812f2e41acaa81590418b70c142a644e1a3f87eb",
      "parents": [
        "b396ff047c3480c99b03a3e4342556fed4a24e2f",
        "78a3233313260665fe82ba56257855e043bca3d4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed Nov 05 02:55:39 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 05 02:55:39 2014 +0000"
      },
      "message": "am 78a32333: Merge \"ART: More warnings\"\n\n* commit \u002778a3233313260665fe82ba56257855e043bca3d4\u0027:\n  ART: More warnings\n"
    },
    {
      "commit": "277ccbd200ea43590dfc06a93ae184a765327ad0",
      "tree": "d89712e93da5fb2748989353c9ee071102cf3f33",
      "parents": [
        "ad17d41841ba1fb177fb0bf175ec0e9f5e1412b3"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Nov 03 21:36:10 2014 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Nov 04 18:40:08 2014 -0800"
      },
      "message": "ART: More warnings\n\nEnable -Wno-conversion-null, -Wredundant-decls and -Wshadow in general,\nand -Wunused-but-set-parameter for GCC builds.\n\nChange-Id: I81bbdd762213444673c65d85edae594a523836e5\n"
    },
    {
      "commit": "0e7217d74914d4feba6bd1c197c883177ea6867c",
      "tree": "65173ae29336ef879ce0e35b1b0a8a3473bb630b",
      "parents": [
        "a660fc15d682912c9dc054f4b7cf53b8d90f337b",
        "3e3364e267117462894e0c3b7d9b413b25d28057"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Oct 28 04:51:55 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Oct 28 04:51:55 2014 +0000"
      },
      "message": "am 3e3364e2: Merge \"Tidy logging code not using UNIMPLEMENTED.\"\n\n* commit \u00273e3364e267117462894e0c3b7d9b413b25d28057\u0027:\n  Tidy logging code not using UNIMPLEMENTED.\n"
    },
    {
      "commit": "2c4257be8191c5eefde744e8965fcefc80a0a97d",
      "tree": "9db3e1f1c60f2df29638ba3ce9d5d5bb8b26ca2c",
      "parents": [
        "98c271d517bc4d25fc6879b4b8e35ea93885d9e2"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 24 14:20:06 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 24 14:23:42 2014 -0700"
      },
      "message": "Tidy logging code not using UNIMPLEMENTED.\n\nChange-Id: I7a79c1671a6ff8b2040887133b3e0925ef9a3cfe\n"
    },
    {
      "commit": "fdb97de88d92cad7698e1eda3062d0cee3d2d18b",
      "tree": "c80e2ed682efe2273e1d8ec39d4a34fdb8358f1e",
      "parents": [
        "c9ed6e64f910a3fb3afa34df36c9f8f56691164c",
        "b9001abff3a45f1ae90536da7dd1ec28a6ae0174"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Oct 03 21:17:36 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Oct 03 21:17:36 2014 +0000"
      },
      "message": "am b9001abf: Add extra logging for lock contention\n\n* commit \u0027b9001abff3a45f1ae90536da7dd1ec28a6ae0174\u0027:\n  Add extra logging for lock contention\n"
    },
    {
      "commit": "b9001abff3a45f1ae90536da7dd1ec28a6ae0174",
      "tree": "9f9c63eb2de3fce4c54583454f37d04f22668f5e",
      "parents": [
        "5be30072c5a750617dc3f9380776d074f26d9f32"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Oct 03 13:28:46 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Oct 03 13:47:39 2014 -0700"
      },
      "message": "Add extra logging for lock contention\n\nWhen we get contention which is longer than kLongWaitMs (\u003d 100ms) we\nlog to logcat.\n\nExample output:\nW/art     ( 9960): Long monitor contention event with owner method\u003dvoid com.android.server.am.BroadcastQueue.processNextBroadcast(boolean) from BroadcastQueue.java:542 waiters\u003d1 for 243ms\n\nBug: 17787391\nChange-Id: Id1f92d9c41ec909d221871ecc2ff6181dcec2ed4\n"
    },
    {
      "commit": "c7376cabb889eb49cbd2dd9a77d10ee63a53d5b5",
      "tree": "09fef7a9ceb03b21ffa0bbe59485d6b1c9dfdc4d",
      "parents": [
        "38510082135a7fb438afb515fa3174596e644e9b"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 08 10:15:19 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Sep 09 09:48:17 2014 +0200"
      },
      "message": "Fix monitor visit for class initializer\n\nWe do not hold class object\u0027s lock when invoking class initializer. Therefore\nit is wrong to visit it when looking for monitors owned by a thread.\n\nBug: 17377924\n\n(cherry picked from commit 6d06f1b34322d91226c9dcd61e53c2b6731f8bb6)\n\nChange-Id: I9a18c421297608dc3109624111f9fea021a16d24\n"
    },
    {
      "commit": "5c9376a0fc6c0b25971d0b92e1de6de4f09ec90c",
      "tree": "c64699ea44ca4a61c828d8a77b743dfd33422f6b",
      "parents": [
        "37394eda2161b6e5b0aa361ad82732fbc664946d",
        "652984e4b32d06344fae8cad52524d4de7ac5c79"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Sep 09 06:16:41 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 09 06:16:41 2014 +0000"
      },
      "message": "am 652984e4: am 77c318d5: Merge \"Fix monitor visit for class initializer\" into lmp-dev\n\n* commit \u0027652984e4b32d06344fae8cad52524d4de7ac5c79\u0027:\n  Fix monitor visit for class initializer\n"
    },
    {
      "commit": "6d06f1b34322d91226c9dcd61e53c2b6731f8bb6",
      "tree": "42e741ac4fe837938a8a20a1bd383aa92b6228b6",
      "parents": [
        "20632daac36995947d2d1943f89f07ac277e61f0"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 08 10:15:19 2014 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Sep 08 10:18:18 2014 +0200"
      },
      "message": "Fix monitor visit for class initializer\n\nWe do not hold class object\u0027s lock when invoking class initializer. Therefore\nit is wrong to visit it when looking for monitors owned by a thread.\n\nBug: 17377924\n\nChange-Id: I7fddcdb9a554301e040c571971eec9be6cba5eda\n"
    },
    {
      "commit": "88ffa4933bab329e8225537be4f7a2333209e0b5",
      "tree": "a831fbb6d95b6d3532314a28661acf9038e405f5",
      "parents": [
        "5b984216c879db9cfebfe8a6b4a44efa3d7090e7",
        "1d4b6eff25aa29cbbf4d216d65349e1ad38f962e"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Aug 22 22:06:47 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Aug 22 22:06:47 2014 +0000"
      },
      "message": "am 1d4b6eff: am 1e4fbd8b: Merge \"Using the correct time for wait_start_ms when lock contention logging is enabled\" into lmp-dev\n\n* commit \u00271d4b6eff25aa29cbbf4d216d65349e1ad38f962e\u0027:\n  Using the correct time for wait_start_ms when lock contention logging is enabled\n"
    },
    {
      "commit": "65282b253b55bbdb7f0e246d8c78ea34f84d0ff5",
      "tree": "713b938600814a62620abe5e2521f9dc267fabad",
      "parents": [
        "1dbc3a918612e9ce01f8b05b5ef5f4cbb34e74d0"
      ],
      "author": {
        "name": "Xin Guan",
        "email": "a18772@motorola.com",
        "time": "Fri Aug 22 11:55:37 2014 -0500"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Aug 22 14:58:41 2014 -0700"
      },
      "message": "Using the correct time for wait_start_ms when lock contention logging is enabled\n\nBug: 17208457\nChange-Id: I35555e0acf3b37bb3776a62c64d59ae93403b237\n(cherry picked from commit b894a19dfd668b6779de939cf5265b7e409d8809)\n"
    },
    {
      "commit": "b894a19dfd668b6779de939cf5265b7e409d8809",
      "tree": "dcb74361c213660a7bfb82a754e967833a474d79",
      "parents": [
        "574758ef03b0930ebd1cb8d9afe741cb374419a1"
      ],
      "author": {
        "name": "Xin Guan",
        "email": "a18772@motorola.com",
        "time": "Fri Aug 22 11:55:37 2014 -0500"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Aug 22 13:46:11 2014 -0700"
      },
      "message": "Using the correct time for wait_start_ms when lock contention logging is enabled\n\nBug: 17208457\nChange-Id: I35555e0acf3b37bb3776a62c64d59ae93403b237\n"
    },
    {
      "commit": "3b18f257344f911d7223bd36b90d1a4ad5331933",
      "tree": "93970f631b75ce62208625bfa06b1d60e9f59884",
      "parents": [
        "517e1e72e50bc30f438ef3826a37213e4ee65dbd",
        "d75383af2f0843ecd2f493fd64b4eb38630c6071"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 18 05:19:46 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Aug 18 05:19:46 2014 +0000"
      },
      "message": "am d75383af: am 5e8a63ae: Merge \"ART: Do not recursively abort when visiting locks in a bad state\" into lmp-dev\n\n* commit \u0027d75383af2f0843ecd2f493fd64b4eb38630c6071\u0027:\n  ART: Do not recursively abort when visiting locks in a bad state\n"
    },
    {
      "commit": "90b180ee1edd17b8dca34ea9e58624818d2ee15a",
      "tree": "22a859bd5f2fe8b08d7a7bc2d5309d8228d59b55",
      "parents": [
        "9d352c06d8b6e9ea6343cc4f361a3309c2ce7ebe",
        "956a5228276693a7317ae6b41bfe7a7f0f3cbe6b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 18 16:41:58 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Aug 16 04:08:14 2014 +0000"
      },
      "message": "Merge \"ART: Do not recursively abort when visiting locks in a bad state\""
    },
    {
      "commit": "956a5228276693a7317ae6b41bfe7a7f0f3cbe6b",
      "tree": "4fb359d422d2d7af04f1b9dc9b8b5d6f268b138b",
      "parents": [
        "078f4ea927b3259d698ca3dd542a096943e2cccd"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Sat Aug 16 13:41:10 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 18 09:40:40 2014 -0700"
      },
      "message": "ART: Do not recursively abort when visiting locks in a bad state\n\nThis avoids a nested abort in VisitLocks.\n\nBug: 17080621, 16382675\n\n(cherry picked from commit 760172c3ccd6e75f6f1a89d8006934e8ffb1303e)\n\nChange-Id: Id604976ac9dcac0e319fb25cab4d2cbc98d7ee24\n"
    },
    {
      "commit": "760172c3ccd6e75f6f1a89d8006934e8ffb1303e",
      "tree": "aa7b9c6c1690d09a36adb1dc7822fde80d057dd0",
      "parents": [
        "ebee8de725d5fa83483642786b19ea453d865762"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Sat Aug 16 13:41:10 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Sun Aug 17 00:53:21 2014 -0700"
      },
      "message": "ART: Do not recursively abort when visiting locks in a bad state\n\nThis avoids a nested abort in VisitLocks.\n\nBug: 17080621, 16382675\nChange-Id: Id604976ac9dcac0e319fb25cab4d2cbc98d7ee24\n"
    },
    {
      "commit": "0ef3bd2a2334c0825130501bbabf6cbc8e870582",
      "tree": "f287b2083ab3ef63541def6f7de42e0ea4740c92",
      "parents": [
        "ee736b29675455ab0be615581145aa239ce7a6b3"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Aug 15 13:39:34 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Aug 15 13:39:34 2014 -0700"
      },
      "message": "Tidy up monitor comments.\n\nChange-Id: Ib9d993f964ba6e2bec1979b486c26d3920a4a40c\n"
    },
    {
      "commit": "6f22fc166ed6c11cad229bff442c064e704de101",
      "tree": "750d9048864a264f35ca7929d8ee1c1c878fa0a2",
      "parents": [
        "63c051a540e6dfc806f656b88ac3a63e99395429"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Aug 15 11:09:28 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Aug 15 11:28:25 2014 -0700"
      },
      "message": "Make Monitor::Wait more robust to spurious Inflate failures.\n\nBug: 17062710\nChange-Id: Ife5f6b335caacc70cab543cd568676d277d3beb6\n"
    },
    {
      "commit": "43c69cc4cea794cd4d89d9d0680b1e25c6d02acc",
      "tree": "fdfabd74408bc13e4b73674e881ab0ebbfb39d0f",
      "parents": [
        "37f048b19da5ac245a6b2a8473b326d2167cc692"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Aug 15 11:09:28 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Aug 15 11:35:38 2014 -0700"
      },
      "message": "Make Monitor::Wait more robust to spurious Inflate failures.\n\nBug: 17062710\nChange-Id: Ife5f6b335caacc70cab543cd568676d277d3beb6\n(cherry picked from commit 6f22fc166ed6c11cad229bff442c064e704de101)\n"
    },
    {
      "commit": "94f7b49578b6aaa80de8ffed230648d601393905",
      "tree": "cfc69e453faefee38178ceb85378e1f0f1e17812",
      "parents": [
        "8df73882c60451e7f789bf9b1f3db2d7dc228640"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Jul 22 18:08:23 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Jul 29 13:30:46 2014 -0700"
      },
      "message": "Add GcRoot to clean up and enforce read barriers.\n\nIntroduce a value-type wrapper around Object* for GC roots so that 1)\nwe won\u0027t have to directly add the read barrier code in many places and\n2) we can avoid accidentally bypassing/missing read barriers on GC\nroots (the GcRoot interface ensures that the read barrier is executed\non a read).\n\nThe jdwp test passed.\n\nBug: 12687968\nChange-Id: Ib167c7c325b3c7e3900133578815f04d219972a1\n"
    },
    {
      "commit": "6ec8ebd178ed39aa09e4c7fad194900114c4121a",
      "tree": "d618cd60098c59e6955ee19cb877b41aa7247753",
      "parents": [
        "9c81c0cb0dc8c8d8ae5dca3d2d82b0eec7af589f"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jul 25 13:36:56 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jul 25 13:36:56 2014 -0700"
      },
      "message": "ART: Clean up API after change 102631\n\nThis adds an abort_on_error parameter to GetCurrentMethod, which is\nby default true. This restores all previous behavior, except for\nmonitor installation, where it follows 101639.\n\nBug: 16556938\nChange-Id: I9a12b9a21ccb9f558c86236bb58d15ff2fafaec0\n"
    },
    {
      "commit": "b363f666883860d40823d5528df3c98c897f74f4",
      "tree": "d4b629045d7e1d3e9236a0d8625b4ccbd0dbfc0f",
      "parents": [
        "ddc211980aa2f6149905d8d26f67201ac8e400b3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 16 13:28:58 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jul 22 17:25:32 2014 -0700"
      },
      "message": "Recycle mem-maps for collector transitions.\n\nWe now create spaces when we need them for collector transitions or\nhomogeneous compaction by recycling mem maps. Change the bump\npointer space size to be as large as the heap capacity instead of\n1/2 heap capacity like it used to be. For GSS, bump pointer spaces\nare set to 32MB currently.\n\nChanged GSS to have main space \u003d\u003d non moving space since we don\u0027t\nneed to copy from the main space.\n\nFixes GC stress tests 074, 096.\nFixed test 080 oom throw with -Xmx2m for GC stress test, this was\nbroken since it was allocating a 4 MB array before starting the\nOOM process.\n\nBug: 14059466\nBug: 16406852\nChange-Id: I62877cfa24ec944a6f34ffac30334f454a8002fd\n"
    },
    {
      "commit": "f3d874c60ee3ada19ce26a5c4e532312b6f3a9e9",
      "tree": "de14ab8b610f43a2c2c4c02f4ac67d614919fde2",
      "parents": [
        "031ddea20cb311dfdb3bd16a13750f9cb426b299"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 17 18:52:42 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 17 18:59:40 2014 -0700"
      },
      "message": "Avoid race in single thread suspension.\n\nDon\u0027t allow more than one concurrent single thread suspension to avoid\npotential cycles and deadlocks where threads try to suspend each other.\nBug: 16364458, 16354227\n\nChange-Id: I907f1d5591a6aa5c241d37d6b4a34f968f98df77\n"
    },
    {
      "commit": "22d5e735f403c57525fe868304c7123f0ce66399",
      "tree": "2458684efa56f0b800dd75a9dedd0449f76f581f",
      "parents": [
        "fbde4dd1cb6db729e3f3ee5bdae0cdd824d73054"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Jul 15 22:23:51 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jul 16 06:13:46 2014 -0700"
      },
      "message": "Remove object_utils.h.\n\nBreak into object_lock, field_helper and method_helper.\nClean up header files following this.\nAlso tidy some of the Handle code in response to compiler errors when resolving\nthe changes in this CL.\n\nChange-Id: I73e63015a0f02a754d0866bfaf58208aebcaa295\n"
    },
    {
      "commit": "251755cd511463260e60be98bf138b6aa1c14bf3",
      "tree": "03c0e714efa3c9b54c2218cd4d5e64b27be01811",
      "parents": [
        "76e6773dfed9e9bf382bbb8d6c8654525fa44b0c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jul 15 18:10:25 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jul 15 18:32:02 2014 -0700"
      },
      "message": "Use sched_yield in Monitor::MonitorEnter.\n\nPreviously we used NanoSleep(1000), but this was unreliable. It could\nresult in waiting for \u003e\u003d 40ms instead of 1us. Since this was in a loop\nit was especially bad if the GC was trying to suspend all the\nthreads when we were sleeping. This resulted in thread suspension\noccasionally taking longer than a second.\nResults on the provided picasso-sample app on Nexus 5:\nLongest GC pause before: ~1.5s.\nLongest GC pause after: \u003c5ms.\n\nAlso added a warning if thread suspension takes longer than a\nthreshold (currently 5ms).\n\nBug: 16307460\nExternal bug: https://code.google.com/p/android-developer-preview/issues/detail?id\u003d367\n\nChange-Id: I3c2a9636357e255f38634615101eff8ca84e632f\n"
    },
    {
      "commit": "228602f562f1d130d06e60a98752d99c2d467d6a",
      "tree": "ee5b543695843ce48ebec4ffc88514ff679f4e93",
      "parents": [
        "be2a1df15a31a5223ee9af3015a00c31d2ad2e10"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 10 02:07:54 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jul 10 02:07:54 2014 -0700"
      },
      "message": "Make CAS operations in Object use art::Atomic.\n\nMake naming consistent with art::Atomic.\n\nChange-Id: If3abdb019ef8b53bd809e3fef3fd5248aeb27e9a\n"
    },
    {
      "commit": "74240819ae09e29b2753ef38f4eb4be1c2762e2e",
      "tree": "61e2d3aa7268ce49fe77715593896f59feb92fe6",
      "parents": [
        "32710dd4a0232149002a5ae7bde1c640cdffd564"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Apr 17 10:35:09 2014 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jul 10 00:51:04 2014 -0700"
      },
      "message": "Use memory chunks for monitors on LP64\n\nMonitor IDs in lock words are only 30b. On a 32b system that works\nfine, as memory is usually aligned enough that shifting works out.\nOn 64b systems, the virtual memory space is too large for that.\nThis adds memory chunks into which we allocate the monitors so that\nwe have base_addr + offset and can use the offset as the monitor ID.\nTo allow for relatively compact but growable storage, we use a list\nof chunks.\n\nAdded a global lock for the monitor pool.\n\nChange-Id: I0e290c4914a2556e0b2eef9902422d7c4dcf536d\n"
    },
    {
      "commit": "1af6a1fa35ff7dc0a5c653f19dbc8a91c914aa42",
      "tree": "07807547760383cfe9310c70ea00eace03b2740b",
      "parents": [
        "13f89cb9930ea799c21559020da43c3845536da5"
      ],
      "author": {
        "name": "Elena Sayapina",
        "email": "elena.v.sayapina@intel.com",
        "time": "Fri Jun 20 16:58:37 2014 +0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jul 07 18:39:55 2014 -0700"
      },
      "message": "ART: Update Monitor::Wait so it releases monitor_lock_ before throwing an exception\n\nThread should release monitor_lock_ Mutex (which guards shared structures behind Java monitor)\nin Monitor::Wait before throwing any exception. Otherwise the thread may be suspended by GC\nduring that time still holding the lock. This may cause deadlock during GC in case\nsome other thread needs to acquire the monitor_lock_. The other thread can\u0027t be suspended\nby GC then waiting for exclusive lock and \"thread suspend timeout\" occurs.\n\nChange-Id: Id02f45052e1cfc01e676a43434125817564d7874\nSigned-off-by: Elena Sayapina \u003celena.v.sayapina@intel.com\u003e\n"
    },
    {
      "commit": "48ab687d1f864fec93c2682de6fdc44ab784e2f8",
      "tree": "a014f5ea92632b8c4409e2c763d87a84aa1a644f",
      "parents": [
        "cbb0e809c0a4e8a4e8b7f5d3768a1864cfb381bb"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 24 11:21:59 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 24 14:49:48 2014 -0700"
      },
      "message": "Add logging to monitor deflation.\n\nChange-Id: I0251ff19e0a3c3b9edc7c7e296f15eb3229f8f7c\n"
    },
    {
      "commit": "bfd9a4378eacaf2dc2bbe05ad48c5164fc93c9fe",
      "tree": "3d3f667c8232a9c1bb6fe9daea0d364f9ae01d8c",
      "parents": [
        "2e1ca953c7fb165da36cc26ea74d3045d7e272c8"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 21 17:43:44 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jun 09 12:46:32 2014 -0700"
      },
      "message": "Change MethodHelper to use a Handle.\n\nAdded ConstHandle to help prevent errors where you modify the value\nstored in the handle of the caller. Also fixed compaction bugs\nrelated to not knowing MethodHelper::GetReturnType can resolve types.\nThis bug was present in interpreter RETURN_OBJECT.\n\nBug: 13077697\n\nChange-Id: I71f964d4d810ab4debda1a09bc968af8f3c874a3\n"
    },
    {
      "commit": "3035961cb41865b80b927546be0c708b6389cec6",
      "tree": "27ed39f92c013381d08c7ad51d311cb29be230dc",
      "parents": [
        "e21bf0099117b82963cdf7f95a1b8dabfcf29397"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed May 21 17:46:23 2014 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jun 06 16:13:42 2014 -0700"
      },
      "message": "Clean up and augment Atomic class.  Replace QuasiAtomic MemBars.\n\nAdd a number of missing C++11 operations to Atomic class.\nInvoke the 64 bit routines in QuasiAtomic when necessary.\nReplace QuasiAtomic membars with fences that correspond to C++11 fences.\n\nQuasiAtomic was moved to the top of the file.  Only fence implementations\nactually changed.\n\nThis replaces some buggy uses of MembarStoreStore, as reported\nin b/14685856 .\n\nAvoid some redundant fences for long volatile operations.\n\nIncompletely converts low-level memory access operations to Atomic.\n\nChange-Id: Iea828431a0cea46540eb74fcaa02071cab6fdcda\n"
    },
    {
      "commit": "66b68faa42cd36eb368f96c206b29c940ddda129",
      "tree": "ec8d7be0ffd659c3369c3a4f45d319b8be3c4892",
      "parents": [
        "52925af1e3136bcf68bc5754fbfa407950235217",
        "0cd81352a7c06e381951cea1b104fd73516f4341"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 23 21:10:42 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri May 23 21:10:42 2014 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Fix an outstanding compaction bug in interpreter.\"\"\""
    },
    {
      "commit": "0cd81352a7c06e381951cea1b104fd73516f4341",
      "tree": "fcc8ff9cdeb608d0913097aa1fb64d1879f11ffa",
      "parents": [
        "dfd301f19800a4f168283cf2d0b15b2c09071955"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 22 16:48:55 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 23 12:55:45 2014 -0700"
      },
      "message": "Revert \"Revert \"Fix an outstanding compaction bug in interpreter.\"\"\n\nFixed the generic trampoline to not use ToJObject when unnecessary.\n\nBug: 15167269\n\nThis reverts commit 3bdb873122964da7937eb070cbcf2ef638a8e459.\n\nChange-Id: I0525d0e0f3afb753c770e1572070a0fa22b02271\n"
    },
    {
      "commit": "46960fe5dcc1be07b39a55114338423a73554449",
      "tree": "fb31a1fc7dc07abe3d87a26f8fd394e9f7193304",
      "parents": [
        "567e9dbc65ee183cda2a052dbf224c8c4a8f9423"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 23 10:43:43 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri May 23 10:43:43 2014 -0700"
      },
      "message": "Make the specification of when we need precise constants more precise.\n\nMeans that oatdump output showing values for deoptimization actually reflects\nwhat we see at runtime.\nAlso, doesn\u0027t do precise in the case of determining methods and fields for the\nquickened case, which may be an occasional performance win.\n\nChange-Id: I62c7fb244f7996ba9d52e7a7ce75c046b663fa17\n"
    },
    {
      "commit": "7d5cf703f3c03769e5b2f7ebc9d216c52ee5c70d",
      "tree": "6d6f6aff838a440f418fe4a4e1451d9db8c8d5dc",
      "parents": [
        "be2cb9b284f3eca3b99571e83b7e0e3109f1ef06",
        "3bdb873122964da7937eb070cbcf2ef638a8e459"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 22 22:07:37 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 22 22:07:38 2014 +0000"
      },
      "message": "Merge \"Revert \"Fix an outstanding compaction bug in interpreter.\"\""
    },
    {
      "commit": "3bdb873122964da7937eb070cbcf2ef638a8e459",
      "tree": "3d29123f33853e11adb67bdd6ac56f19ee798a1f",
      "parents": [
        "e09ae0920be57760fb390b6944bce420fa0b5582"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 22 22:06:51 2014 +0000"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 22 22:06:51 2014 +0000"
      },
      "message": "Revert \"Fix an outstanding compaction bug in interpreter.\"\n\nThis reverts commit e09ae0920be57760fb390b6944bce420fa0b5582.\n\nChange-Id: I48036306130d5ccfec683d0dc3e9a642a02ee9c1\n"
    },
    {
      "commit": "a6e7f0872c42009ecbee82d7fbe452deef9ae65b",
      "tree": "1ba6d026f6c9a47b9961c62511ab47c6d69314dd",
      "parents": [
        "697726d42eaf804a1124c25dec58c2b0013a30e9"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 22 14:43:37 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 22 14:43:37 2014 -0700"
      },
      "message": "Move SetMonitorEnterObject outside of blocked thread state change.\n\nRace condition:\nThread is suspended in monitor kBlocked, GC decides to run the\ncheckpoint on it. The GC sees that the object is non null, and goes\nto mark it, but then the thread does SetMonitorObject(nullptr).\nWhich causes a null object to be marked.\n\nChange-Id: Ie8a5074112947ec07d01ccb813ca2c1bb9ac7066\n"
    },
    {
      "commit": "697726d42eaf804a1124c25dec58c2b0013a30e9",
      "tree": "28b1dbbfe0bd2110e32c54293f0ea655e1a2de02",
      "parents": [
        "65e3b69b366c6b7e06b87e7a1f76d30a51b1f777",
        "e09ae0920be57760fb390b6944bce420fa0b5582"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 22 17:57:52 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 22 17:57:52 2014 +0000"
      },
      "message": "Merge \"Fix an outstanding compaction bug in interpreter.\""
    },
    {
      "commit": "e09ae0920be57760fb390b6944bce420fa0b5582",
      "tree": "acc40266093df4289ffb6728c979cafd6b5114d2",
      "parents": [
        "b8033db2a8dc6f7c7e29b1552177542964f56e44"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 15 12:39:19 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 22 10:47:44 2014 -0700"
      },
      "message": "Fix an outstanding compaction bug in interpreter.\n\nFixed a bug in DoFieldPut where the FieldHelper GetType could cause\nthread suspension which would result in a stale obj.\n\nAdded more handles in the class linker to facilitate moving fiels\nand methods in the future.\n\nRemoved un-necessarly passing handle references since these are value\ntypes and don\u0027t need to be passed by reference.\n\nAdded a special NullHandle type which allows null handles without a\nhandle scope.\n\nChange-Id: I1b51723920a2e4f4f8b2907066f578a3e879fd5b\n"
    },
    {
      "commit": "225353e2ff7072d4e4aa9d2cd9cdbfa83670e323",
      "tree": "41b4ab344e0d5eef729be167d97857112e48670e",
      "parents": [
        "5da6e2b88258733dd3856543af27ca73b395ef60",
        "4cba0d979a11f955e6ec3c0f1bf61478af7aa810"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu May 22 17:34:44 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 22 17:34:45 2014 +0000"
      },
      "message": "Merge \"Add a read barrier for weak roots in monitors.\""
    },
    {
      "commit": "4cba0d979a11f955e6ec3c0f1bf61478af7aa810",
      "tree": "b3e3b61af6bd079989a1bf5259daaa8006af32d4",
      "parents": [
        "388c6e273018c753d7822d09d7cda0826f0c32ed"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed May 21 21:10:23 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed May 21 21:19:17 2014 -0700"
      },
      "message": "Add a read barrier for weak roots in monitors.\n\nA weak root requires a read barrier for the to-space invariant to hold\nbecause the object pointed to by a weak root can\u0027t be marked/forwarded\nlike the one pointed to by a strong root (GC does not know if it\u0027s\nalive or not at that point) and because, without a read barrier, a\nmutator could access it and obtain a from-space reference, which would\nviolate the to-space invariant.\n\nTODO: do similar for the other types of weak roots.\n\nBug: 12687968\nChange-Id: I563a0fa4f875e0c21ac96f57696959454e13b15a\n"
    },
    {
      "commit": "3e5cf305db800b2989ad57b7cde8fb3cc9fa1b9e",
      "tree": "52a737323ebd505cf37ca0e4b2dcee6524fba07f",
      "parents": [
        "27a2b70f612af9afc0fb5392fb10059f6a0a3569"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue May 20 16:40:37 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue May 20 21:17:03 2014 -0700"
      },
      "message": "Begin migration of art::Atomic to std::atomic.\n\nChange-Id: I4858d9cbed95e5ca560956b9dabd976cebe68333\n"
    },
    {
      "commit": "700a402244a1a423da4f3ba8032459f4b65fa18f",
      "tree": "4c22fcda04d271bd55a37aff30650214af17a90c",
      "parents": [
        "047c11adcbcbc0bcf210defdfcbada763961ffee"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon May 19 16:49:03 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon May 19 22:27:39 2014 -0700"
      },
      "message": "Now we have a proper C++ library, use std::unique_ptr.\n\nAlso remove the Android.libcxx.mk and other bits of stlport compatibility\nmechanics.\n\nChange-Id: Icdf7188ba3c79cdf5617672c1cfd0a68ae596a61\n"
    },
    {
      "commit": "86ab7912423f63541073af5c487b509e9b2b5420",
      "tree": "bdf2cda5bd949a5577fe9a64c708731378c8ba6c",
      "parents": [
        "e1a71b2a6e899645b006c29ba37695f521545a5b"
      ],
      "author": {
        "name": "Haifeng Li",
        "email": "omycle@gmail.com",
        "time": "Fri May 16 10:47:59 2014 +0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 16 09:36:58 2014 -0700"
      },
      "message": "ART: Fix Segment Fault with null owner while monitor logging is enabled\n\nWhen the monitor inflates from thin to fat with the existing hashcode，\nthe owner is nullptr, which will cause segment fault with\nowner-\u003eGetThreadId().\n\nChange-Id: I90081d581a0ffd3d38763cc175fd2d7f66076747\n"
    },
    {
      "commit": "a1ee14fc66a3c99bb7d5744ace881ec93c46f59d",
      "tree": "2cd8d531b587125a364a6dc8d90b0d882715d01d",
      "parents": [
        "421c53742610c053543f8c84e04d5e0c5185d68c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 14 16:51:03 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 14 17:05:03 2014 -0700"
      },
      "message": "Fix race in inflating thin locks.\n\nBefore we were inflating the lock word in the blocked state, this\nmeant that the garbage collector could be running at this point\nresulting in the lock word changing from underneath us.\n\nBug: 14881707\nChange-Id: If8897b2572a1b29a3cf44e5eb2e11c186236f519\n"
    },
    {
      "commit": "eb8167a4f4d27fce0530f6724ab8032610cd146b",
      "tree": "bcfeaf13ad78f2dd68466bbd0e20c71944f7e854",
      "parents": [
        "6fb66a2bc4e1c0b7931101153e58714991237af7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 07 15:43:14 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 13 14:45:54 2014 -0700"
      },
      "message": "Add Handle/HandleScope and delete SirtRef.\n\nDelete SirtRef and replaced it with Handle. Handles are value types\nwhich wrap around StackReference*.\n\nRenamed StackIndirectReferenceTable to HandleScope.\n\nAdded a scoped handle wrapper which wraps around an Object** and\nrestores it in its destructor.\n\nRenamed Handle::get -\u003e Get.\n\nBug: 8473721\n\nChange-Id: Idbfebd4f35af629f0f43931b7c5184b334822c7a\n"
    },
    {
      "commit": "4d7f61d44a732cfbc8573e5d93364983fd746888",
      "tree": "0ad34f9316227531696c01ba9b25a2175a5c5f65",
      "parents": [
        "425640d6fac3432a44e236a002e8401a7cd59c5c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Apr 17 14:43:39 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Apr 17 15:56:47 2014 -0700"
      },
      "message": "Use non volatile lock words in semispace collector.\n\nGSS FormulaEvaluationActions.EvaluateAndApplyChanges:\nBefore GC time: 9.1s\nAfter GC time: 7.98s\n\nFixed timing logger errors.\n\nChange-Id: I4193c6ccbbbe7a7220dfaabbf3472a5dcebae616\n"
    },
    {
      "commit": "440e4ceb310349ee8eb569495bc04d3d7fbe71cb",
      "tree": "db278d463f0c2440e9c8e8cb80e53d2b2effe196",
      "parents": [
        "4d3dc8a04da8a80251b381cdb482190363171dc1"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Mar 31 16:36:35 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Apr 07 13:44:36 2014 -0700"
      },
      "message": "Add monitor deflation.\n\nWe now deflate the monitors when we perform a heap trim. This causes\na pause but it shouldn\u0027t matter since we should be in a state where\nwe don\u0027t care about pauses. Memory savings are hard to measure.\n\nFixed integer overflow bug in GetEstimatedLastIterationThroughput.\n\nBug: 13733906\nChange-Id: I4e0e68add02e7f43370b3a5ea763d6fe8a5b212c\n"
    },
    {
      "commit": "d803bc7ce255be6c16eaf6a8a58a742515e9da9f",
      "tree": "9d996494ae037ba99bb149927adfe961be68926b",
      "parents": [
        "8ce67ac16abcd25b376be622cbd20a34aec4a59d"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Apr 01 15:33:03 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Apr 01 15:33:03 2014 -0700"
      },
      "message": "Fix ThreadStress, unify ANR lock descriptions.\n\nBug: 13323656\nChange-Id: I902825a847af9aa570ed79701409298e3532bebf\n"
    },
    {
      "commit": "dd7624d2b9e599d57762d12031b10b89defc9807",
      "tree": "c972296737f992a84b1552561f823991d28403f0",
      "parents": [
        "8464a64a50190c06e95015a932eda9511fa6473d"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Mar 14 17:43:00 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Apr 01 08:24:16 2014 -0700"
      },
      "message": "Allow mixing of thread offsets between 32 and 64bit architectures.\n\nBegin a more full implementation x86-64 REX prefixes.\nDoesn\u0027t implement 64bit thread offset support for the JNI compiler.\n\nChange-Id: If9af2f08a1833c21ddb4b4077f9b03add1a05147\n"
    },
    {
      "commit": "719d1a33f6569864f529e5a3fff59e7bca97aad0",
      "tree": "fcd84efd7b9806b93ec1a44e2317e6f882e7fe0e",
      "parents": [
        "5365eea9940269b662cfbe103caa348816ff1558"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Mar 06 12:13:39 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Mar 06 19:16:01 2014 -0800"
      },
      "message": "Enable annotalysis on clang ART builds.\n\nFix clang build errors aswell as restructure locking/mutex code for correct\nthread safety analysis support.\nReorder make dependencies so that host builds build first as they should\nprovide better compilation errors than target.\nRemove host\u0027s use of -fno-omit-frame-pointer as it has no value with correct\nuse of CFI, which we should have.\n\nChange-Id: I72cea8da9a3757b1a0b3acb4081feccb7c6cef90\n"
    },
    {
      "commit": "e7e8a5fea2d852cccc840fa046151a16627f26cd",
      "tree": "4509736090c371a363e79f4a3d01107d0b8d5e72",
      "parents": [
        "cc35e45f371f5018b42e2ef383185e2840cf4374"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Feb 14 16:59:41 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Feb 14 18:26:37 2014 -0800"
      },
      "message": "Remove using mirror::* in jni internal.\n\nCleans up the code since it helps make it easier to spot moving GC\nrelated bugs.\n\nAlso fixed moving GC bugs in MonitorEnter, and FindFieldID.\n\nChange-Id: I794e4fbcc2010875fc6b299c6d4c9fb0f071b71a\n"
    },
    {
      "commit": "83c8ee000d525017ead8753fce6bc1020249b96a",
      "tree": "d5167ed15dee2629905ac3640b6ea0578d4ae312",
      "parents": [
        "7cba217ab0661d74deccbb97160cdf60b74d4ea3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jan 28 14:50:23 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 11 10:40:10 2014 -0800"
      },
      "message": "Add root types and thread id to root visiting.\n\nEnables us to pass the root type and thread id to hprof.\n\nBug: 12680863\nChange-Id: I6a0f1f9e3aa8f9b4033d695818ae7ca3460d67cb\n"
    },
    {
      "commit": "ef7d42fca18c16fbaf103822ad16f23246e2905d",
      "tree": "c67eea52a349c2ea7f2c3bdda8e73933c05531a8",
      "parents": [
        "822115a225185d2896607eb08d70ce5c7099adef"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Jan 06 12:55:46 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Feb 06 23:20:27 2014 -0800"
      },
      "message": "Object model changes to support 64bit.\n\nModify mirror objects so that references between them use an ObjectReference\nvalue type rather than an Object* so that functionality to compress larger\nreferences can be captured in the ObjectRefererence implementation.\nObjectReferences are 32bit and all other aspects of object layout remain as\nthey are currently.\n\nExpand fields in objects holding pointers so they can hold 64bit pointers. Its\nexpected the size of these will come down by improving where we hold compiler\nmeta-data.\nStub out x86_64 architecture specific runtime implementation.\nModify OutputStream so that reads and writes are of unsigned quantities.\nMake the use of portable or quick code more explicit.\nTemplatize AtomicInteger to support more than just int32_t as a type.\nAdd missing, and fix issues relating to, missing annotalysis information on the\nmutator lock.\nRefactor and share implementations for array copy between System and uses\nelsewhere in the runtime.\nFix numerous 64bit build issues.\n\nChange-Id: I1a5694c251a42c9eff71084dfdd4b51fff716822\n"
    },
    {
      "commit": "b122a4bbed34ab22b4c1541ee25e5cf22f12a926",
      "tree": "624f16271f4481a8fd5aa2f607385f490dc7b3ae",
      "parents": [
        "e40687d053b89c495b6fbeb7a766b01c9c7e039c"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Nov 19 18:00:50 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Dec 20 08:01:57 2013 -0800"
      },
      "message": "Tidy up memory barriers.\n\nChange-Id: I937ea93e6df1835ecfe2d4bb7d84c24fe7fc097b\n"
    },
    {
      "commit": "5f51d4b80058236759fea1d932470a57f348c199",
      "tree": "096ce11ba8dc096fd27d2fbed84459080c7d3b1e",
      "parents": [
        "d83d4c86c89357a74e94963994ad0c42ea7299c3"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Dec 03 14:24:05 2013 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Dec 05 12:57:43 2013 -0800"
      },
      "message": "Fix races in thread list Unregister.\n\nFirst race:\nWe were releasing the thin_lock_id in Unregister before the thread\nwas not suspended. This could cause problems in\nSuspendThreadByThreadId since there was a small window of time where\ntwo threads could share the same thread id. This race caused an\noccasional check failure in SuspendThreadByThreadId.\n\nSecond race:\nWe were setting the thin_lock_thread_id_ to 0 in Unregister before\nwaiting to not be suspended. This caused another race in\nSuspendThreadByThreadId where we modified the thread suspend count,\nbusy waited, but didn\u0027t find the thread the next iteration. This\nmeant that we were returning null even though we had modified the\nsuspend count. This caused the suspend count to not get decremented\nsince the caller didn\u0027t know that the suspend count had been\nincreased. Removing the self-\u003ethin_lock_thread_id_ \u003d 0 in\nThreadList::UnRegister fixes this race.\n\nAdded a bit of additional checks and logging to prevent these issues\nfrom resurfacing, other misc cleanup.\n\nAdded thread names to threads in ThreadStress.\n\nBug: 11319866\n\nChange-Id: I48e3a0700193b72079e450be1e924a2f88cf52e2\n"
    },
    {
      "commit": "46bc778f1feed02b20d25e3d03470c93ca2c0506",
      "tree": "ac760c321039cd8a5e78ae766accf4dc3ddb194b",
      "parents": [
        "0b74e3acc2fd35d95ac55c4ee2ffe5c651229ed8"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Nov 12 17:03:02 2013 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Nov 12 17:03:02 2013 -0800"
      },
      "message": "Fix portable + mips build.\n\nChange-Id: Ia200e582b04c84973281e12331777351feb8a401\n"
    },
    {
      "commit": "590fee9e8972f872301c2d16a575d579ee564bee",
      "tree": "b02db45c72f1911ec896b93379ada0276aea3199",
      "parents": [
        "5b70680b8df6d8fa95bb8e1070d0107f3d388940"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 13 13:46:47 2013 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 11 15:34:27 2013 -0800"
      },
      "message": "Compacting collector.\n\nThe compacting collector is currently similar to semispace. It works by\ncopying objects back and forth between two bump pointer spaces. There\nare types of objects which are \"non-movable\" due to current runtime\nlimitations. These are Classes, Methods, and Fields.\n\nBump pointer spaces are a new type of continuous alloc space which have\nno lock in the allocation code path. When you allocate from these it uses\natomic operations to increase an index. Traversing the objects in the bump\npointer space relies on Object::SizeOf matching the allocated size exactly.\n\nRuntime changes:\nJNI::GetArrayElements returns copies objects if you attempt to get the\nbacking data of a movable array. For GetArrayElementsCritical, we return\ndirect backing storage for any types of arrays, but temporarily disable\nthe GC until the critical region is completed.\n\nAdded a new runtime call called VisitObjects, this is used in place of\nthe old pattern which was flushing the allocation stack and walking\nthe bitmaps.\n\nChanged image writer to be compaction safe and use object monitor word\nfor forwarding addresses.\n\nAdded a bunch of added SIRTs to ClassLinker, MethodLinker, etc..\n\nTODO: Enable switching allocators, compacting on background, etc..\n\nBug: 8981901\n\nChange-Id: I3c886fd322a6eef2b99388d19a765042ec26ab99\n"
    },
    {
      "commit": "4e6a31eb97f22f4480827474b30b9e64f396eace",
      "tree": "3afe222c60314a22be8bb8de61cb245e1af2dc92",
      "parents": [
        "1b8cb967143d5c46db1db8ac940a73d111be3628"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 31 10:35:05 2013 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 31 13:33:51 2013 -0700"
      },
      "message": "Lazily compute object identity hash codes.\n\nBefore, we computed identity hashcodes whenever we inflated a monitor.\nThis caused issues since it meant that we would have all of these\nhash codes in the image, causing locks to excessively inflate during\napplication run time.\n\nThis change makes it so that we lazily compute hash codes. When a\nthin lock gets inflated, we assign a hash code of 0 assigned to it.\nThis value signifies no hash code. When we try to get the identity\nhash code of an object with an inflated monitor, it gets computed if\nit is 0.\n\nChange-Id: Iae6acd1960515a36e74644e5b1323ff336731806\n"
    },
    {
      "commit": "9728f91a63016136261231ff5213bde703bd27b6",
      "tree": "a5da6d2ed4942a5b8fc00ad73551d7794703206b",
      "parents": [
        "30839a76a9efbda83189420b6cbce66cd7d15dd2"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 30 09:45:13 2013 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 30 09:45:56 2013 -0700"
      },
      "message": "Add missing null check in monitor install.\n\nFixes broken OTA.\n\nChange-Id: I3a89e4755dc6b23d214ec542df3d167e788b904d\n"
    },
    {
      "commit": "ad2541a59c00c2c69e8973088891a2b5257c9780",
      "tree": "523898cf039c5185352978e71a54fa3a2657a04c",
      "parents": [
        "9780099e445884d8bc9444c8c1261b02d80a26c7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Oct 25 10:05:23 2013 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 29 12:14:36 2013 -0700"
      },
      "message": "Fix object identity hash.\n\nThe object identity hash is now stored in the monitor word after\nbeing computed. Hashes are computed by a pseudo random number\ngenerator.\n\nWhen we write the image, we eagerly compute object hashes to\nprevent pages getting dirtied.\n\nBug: 8981901\n\nChange-Id: Ic8edacbacb0afc7055fd740a52444929f88ed564\n"
    },
    {
      "commit": "13c479e7e9b62115fe0409e5273c1e976a1c09f9",
      "tree": "2c3fa2fd752f8e80ea888887c4ef46fd00bdb696",
      "parents": [
        "9822c33a66157b7a4c96222befb0848e204dcc5b"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 11 07:59:01 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Oct 11 07:59:01 2013 -0700"
      },
      "message": "Notify doesn\u0027t inflate, rename helper.\n\nChange-Id: I85c93b522478b3116a66630856a2370ec0fda490\n"
    }
  ],
  "next": "d9c4fc94fa618617f94e1de9af5f034549100753"
}
