)]}'
{
  "log": [
    {
      "commit": "057d977aed600843dd4a617dca7098555d79110b",
      "tree": "1af506ef9e3ae36d44c355b0baa49b362d976f83",
      "parents": [
        "6a669aac63ffc17b5e903aa4a1f285fe338eadcf"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Feb 17 15:33:23 2017 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Feb 21 13:50:11 2017 -0800"
      },
      "message": "Always mark reference referents in transaction mode.\n\nFix a to-space invariant check failure in EnqueueFinalizerReferences.\n\nReference processing can be a problem and useless during transaction\nbecause it\u0027s not easy to roll back what reference processing does and\nthere\u0027s no daemon threads running (in the unstarted runtime). To avoid\nissues, always mark reference referents.\n\nAdd a do_atomic_update parameter to MarkHeapReference.\n\nBug: 35417063\nTest: test-art-host with CC/CMS/SS.\nChange-Id: If32eba8fca19ef86e5d13f7925d179c8aecb9e27\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": "65f5f247a367af9d6b9ac63767b69ecf3ab079bc",
      "tree": "bff631b0efd7e8fe77be9c445ea9224e2b67433b",
      "parents": [
        "5b32b91d731d6187ada4c6fc804041b7b3b6903c"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Dec 19 11:44:47 2016 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Dec 19 11:44:47 2016 -0800"
      },
      "message": "Fix race condition btw DelayReferenceRefernent vs Reference.clear().\n\nRename IsMarkedHeapReference to IsNullOrMarkedHeapReference.\n\nMove the null check from the caller of IsMarkedHeapReference into\nIsNullOrMarkedHeapReference.\n\nMake sure that the referent is only loaded once between the null\ncheck and the IsMarked call.\n\nUse a CAS in ConcurrentCopying::IsNullOrMarkedHeapReference when\ncalled from DelayReferenceRefernent.\n\nBug: 33389022\nTest: test-art-host without and with CC.\n\nChange-Id: I20edab4dac2a4bb02dbb72af0f09de77b55ac08e\n"
    },
    {
      "commit": "c9a7028430d95090ad3d7690203fd887d1e201a4",
      "tree": "83e690d43ce87913c274b788c61d3425e6570e51",
      "parents": [
        "36994ba006c18c1933815cc0c4c036df086e6814"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Dec 13 14:44:33 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Dec 13 16:40:14 2016 -0800"
      },
      "message": "Add exclusion for Reference.clear and reference processing\n\nPrevents race conditions like unclearing cleared references or\ncalling IsMarkedHeapReference on null references.\n\nBug: 33389022\n\nTest: test-art-host\n\nChange-Id: Iee83b76d84453e929172f1a83f284aa4910e126c\n"
    },
    {
      "commit": "36994ba006c18c1933815cc0c4c036df086e6814",
      "tree": "013dfafba31b6d07f4880873f378475a1ce5975f",
      "parents": [
        "017c55c120a40612364448826692cc7d402eb913"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Dec 13 11:46:28 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Dec 13 12:52:41 2016 -0800"
      },
      "message": "Don\u0027t re-read referent in ReferenceProcessor::GetReferent\n\nRe-reading has the issue that it may read a null value after already\nhaving done the null check. Using a cached value prevents this from\nhappening and causing DCHECK failures.\n\nAdded a related stress test.\n\nBug: 33569625\nBug: 33389022\n\nTest: test-art-host\n\nChange-Id: Ic42d540e035d41ac6e5b01762f9510cd6632b28c\n"
    },
    {
      "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": "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": "5d3f73aef1b778d81ba101ece41935adee259cf2",
      "tree": "fec0c2fdbb88df0a366e29b6470d1274aa6e2ec1",
      "parents": [
        "cfdff144f154df876987fefb340058a975c43381"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Oct 14 14:28:47 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Oct 14 14:38:43 2016 -0700"
      },
      "message": "Move reference processor and mirror::Reference to ObjPtr\n\nBug: 31113334\n\nTest: test-art-host\n\nChange-Id: I2c7c3dfd88ebf12a0de271436f8a7781f997e061\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": "c4695dfdab80c280c98a89c20e027a3804191585",
      "tree": "b78f388ac75edd9f02abfcae68aad7d445af75d1",
      "parents": [
        "97f4bc04b61d5cf78b0820dbf18e999b20d7a108"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Jan 15 14:08:05 2016 -0800"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Thu Jan 28 15:34:19 2016 -0800"
      },
      "message": "Always use pendingNext to test enqueability of references.\n\nAlso clean up a misleading comment in a reference queue test.\n\nBug: 24404957\nChange-Id: Ieea4788039ecef73cba1871fb480a439bf65b499\n"
    },
    {
      "commit": "522d51b088c63d757e487d07d769f8f09e042f2a",
      "tree": "f1b5a1646ef0fa68f7b51e68caaf1f82624099e2",
      "parents": [
        "c31fb58453ec1eba82390c3313623d37314c5490"
      ],
      "author": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Fri Jan 22 14:18:57 2016 -0800"
      },
      "committer": {
        "name": "Richard Uhler",
        "email": "ruhler@google.com",
        "time": "Tue Jan 26 15:19:36 2016 -0800"
      },
      "message": "Factor out common code for SetPendingNext.\n\nChange-Id: I6c1f9cd6da7b2c21714175455e61479273d3669f\n"
    },
    {
      "commit": "91d65e024846717fce3572106cffe9b957b8902c",
      "tree": "22ea1a91afdd552a31bb2365a9eae034ae0a1c9b",
      "parents": [
        "1bcbcf8e848d18b19d248c3d15f77c888f2b5f04"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jan 19 15:59:16 2016 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jan 19 15:59:16 2016 +0000"
      },
      "message": "Fix various typos in ART\u0027s comments and string literals.\n\nChange-Id: I85d628055b1a61647a77fef730c9631c234e22a2\n"
    },
    {
      "commit": "8118781ebc9659f806716c451bdb3fe9b77ae32b",
      "tree": "47d9e968946dabe4099c5e1af506e1bcd6eaee58",
      "parents": [
        "e5abf0702555f9f4284a96e923f5c331561974e4"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 15 14:24:07 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 15 14:57:37 2015 -0700"
      },
      "message": "Address some GC comments\n\nFollow-up from:\nhttps://android-review.googlesource.com/#/c/159650/\n\nChange-Id: Id14f29b4ce5b70b63fcb3e74f8503ae60a3ae444\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": "a5eae69589ff562ad66c57665882cd16f237321c",
      "tree": "b80e50c050f5d32fc7b258ef1446a245a97c3df8",
      "parents": [
        "6d1a047b4b3f9707d4ee1cc19e99717ee021ef48"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Dec 17 17:56:03 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Dec 19 17:08:43 2014 -0800"
      },
      "message": "Add heap task processor\n\nThe heap task processor processes async tasks which may be delayed.\nThe motivation for this change is preventing deadlocks which\ncan occur when the daemon threads get suspended by GetThreadStack.\n\nOther improvements, reduces daemon thread count by one.\nCleaner pending transition VS heap trimming logic.\n\nBug: 18739541\n\nChange-Id: Idab52b2d9661a6385cada74b93ff297ddc55fc78\n"
    },
    {
      "commit": "d64ba3813069b9d178eb2b8655c9675a20160364",
      "tree": "4e7c72e8dfa02c38435842c9a709933974e23950",
      "parents": [
        "152f391b17080e2dcc2294425c7fa2afe73a4f44"
      ],
      "author": {
        "name": "Pavel Vyssotski",
        "email": "pavel.n.vyssotski@intel.com",
        "time": "Mon Dec 15 18:00:17 2014 +0600"
      },
      "committer": {
        "name": "Pavel Vyssotski",
        "email": "pavel.n.vyssotski@intel.com",
        "time": "Mon Dec 15 18:00:17 2014 +0600"
      },
      "message": "Use WaitHoldingLocks in ReferenceProcessor::MakeCircularListIfUnenqueued.\n\nThe caller may be holding mutator_lock_, so we must use WaitHoldingLocks.\nOtherwise we get \u0027bad_mutexes_held\u0027 error with debug build.\n\nSee also https://android-review.googlesource.com/#/c/93892.\n\nChange-Id: I87b1119e22a9934fdc622c4c4e2690b8b552b539\nSigned-off-by: Pavel Vyssotski \u003cpavel.n.vyssotski@intel.com\u003e\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": "7f590e25c76891c3839a282635b5932af23812df",
      "tree": "38ea385029903068f5e8753a0ab154026c7238de",
      "parents": [
        "79bbbe2d79811d4e86486cb8bc2b49e9a2b3c0d9"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 12 19:46:28 2014 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Sep 17 22:46:45 2014 -0700"
      },
      "message": "Restore some aosp/master changes lost in cherry-pick 7c438b19b71932ac8a44eff44f20744a01559c8d\n\nChange-Id: Ic9fe8a235baac85efbdf748aeaddf98139558c4e\n"
    },
    {
      "commit": "a5a53efea976af505f4f849b5925d5e14c4f8e5c",
      "tree": "455a536a9394908c17ec1ede04ab7ec49f9d3420",
      "parents": [
        "91bbd5347b391278b56440b2dbb0b77526bae4e8"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 12 12:58:05 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sun Sep 14 14:48:24 2014 -0700"
      },
      "message": "Add native support for FinalizerList.makeCircularListIfUnenqueued\n\nCalled from FinalizerReference.enqueueSentinelReference to prevent\na race where the GC updates pendingNext of the sentinel reference\nbefore enqueueSentinelReference.\n\nBug: 17462553\n\n(cherry picked from commit 3256166df40981f1f1997a5f00303712277c963f)\n\nChange-Id: I7ad2fd250c2715d1aeb919bd548ef9aab24f30a2\n"
    },
    {
      "commit": "4ee7a665e7f9cd2c5ace2d6304e33f64067b209f",
      "tree": "e8e6867c71fde6e37ec5597e8677ab807084f734",
      "parents": [
        "76e6773dfed9e9bf382bbb8d6c8654525fa44b0c"
      ],
      "author": {
        "name": "Fred Shih",
        "email": "ffred@google.com",
        "time": "Fri Jul 11 09:59:27 2014 -0700"
      },
      "committer": {
        "name": "Fred Shih",
        "email": "ffred@google.com",
        "time": "Tue Jul 15 15:45:21 2014 -0700"
      },
      "message": "Revert \"Revert \"Revert \"Revert \"Add intrinsic for Reference.get()\"\"\"\"\n\nFixed TargetReg issue causing build failure for x86.\nThis reverts commit 9e82bd3f0ce9e5f5777bea2f752ff3e251d32f9f.\n\nChange-Id: I7e6a526954467aaf68deeed999880dfe9aa5f06e\n"
    },
    {
      "commit": "9e82bd3f0ce9e5f5777bea2f752ff3e251d32f9f",
      "tree": "b2d65f4668793fab5652dfe41dcf13c913fee3a8",
      "parents": [
        "d4415e8bd04c4a9367744ff0149597b4f37a0e0a"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jul 11 10:09:13 2014 +0000"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Fri Jul 11 10:09:13 2014 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Add intrinsic for Reference.get()\"\"\"\n\nThis reverts commit d4415e8bd04c4a9367744ff0149597b4f37a0e0a.\n\nChange-Id: I34553ccbdcfea35c7742d21be2a74dc7085ab2a0\n"
    },
    {
      "commit": "d4415e8bd04c4a9367744ff0149597b4f37a0e0a",
      "tree": "97c42c08fd04034cf6cecadb39644bf9531be0f1",
      "parents": [
        "a9b870b73a155ce70c867d5b3f9758fab0b45f07"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jul 11 06:44:39 2014 +0000"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jul 11 06:44:39 2014 +0000"
      },
      "message": "Revert \"Revert \"Add intrinsic for Reference.get()\"\"\n\nThis reverts commit a9b870b73a155ce70c867d5b3f9758fab0b45f07.\n\nChange-Id: Ic2a9b47f2b911bef4b764d10bc33cf000e4b4211\n"
    },
    {
      "commit": "a9b870b73a155ce70c867d5b3f9758fab0b45f07",
      "tree": "b2d65f4668793fab5652dfe41dcf13c913fee3a8",
      "parents": [
        "460503b13bc894828a2d2d47d09e5534b3e91aa1"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jul 11 04:18:58 2014 +0000"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Jul 11 04:18:58 2014 +0000"
      },
      "message": "Revert \"Add intrinsic for Reference.get()\"\n\nThis reverts commit 460503b13bc894828a2d2d47d09e5534b3e91aa1.\n\nChange-Id: Ie63f43049307e02e3b90f4e034abc9ea54ca4e24\n"
    },
    {
      "commit": "460503b13bc894828a2d2d47d09e5534b3e91aa1",
      "tree": "97c42c08fd04034cf6cecadb39644bf9531be0f1",
      "parents": [
        "adce33da293b0eeaaf52673338770f22be71ca5d"
      ],
      "author": {
        "name": "Fred Shih",
        "email": "ffred@google.com",
        "time": "Wed Jun 18 11:26:11 2014 -0700"
      },
      "committer": {
        "name": "Fred Shih",
        "email": "ffred@google.com",
        "time": "Thu Jul 10 10:41:34 2014 -0700"
      },
      "message": "Add intrinsic for Reference.get()\n\nAdded an intrinsic function for Reference.get(). Return immediately\nwithout going through JNI if the slow path is not currently in use.\nOtherwise, branch off to the the existing JNI function.\n\nApproximately 47x speedup for cases where slow path is not enabled.\n\nChange-Id: I13ad65a356fe4e104d8d83980694dc2740d7d039\n"
    },
    {
      "commit": "f5997b4d3f889569d5a2b724d83d764bfbb8d106",
      "tree": "f0d3b3890a604a8b3c4c87c0f408f86df041690e",
      "parents": [
        "9658d24deaa9bd07781bfac860d2a6dd89066d55"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 20 10:37:54 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 24 13:45:05 2014 -0700"
      },
      "message": "More advanced timing loggers.\n\nThe new timing loggers have lower overhead since they only push into\na vector. The new format has two types, a start timing and a stop\ntiming. You can thing of these as brackets associated with a\ntimestamp. It uses these to construct various statistics when needed,\nsuch as: Total time, exclusive time, and nesting depth.\n\nChanged PrettyDuration to have a default of 3 digits after the decimal\npoint.\n\nExaple of a GC dump with exclusive / total times and indenting:\nI/art     (23546): GC iteration timing logger [Exclusive time] [Total time]\nI/art     (23546):   0ms InitializePhase\nI/art     (23546):   0.305ms/167.746ms MarkingPhase\nI/art     (23546):     0ms BindBitmaps\nI/art     (23546):     0ms FindDefaultSpaceBitmap\nI/art     (23546):     0ms/1.709ms ProcessCards\nI/art     (23546):       0.183ms ImageModUnionClearCards\nI/art     (23546):       0.916ms ZygoteModUnionClearCards\nI/art     (23546):       0.610ms AllocSpaceClearCards\nI/art     (23546):       1.373ms AllocSpaceClearCards\nI/art     (23546):     0.305ms/6.318ms MarkRoots\nI/art     (23546):       2.106ms MarkRootsCheckpoint\nI/art     (23546):       0.153ms MarkNonThreadRoots\nI/art     (23546):       4.287ms MarkConcurrentRoots\nI/art     (23546):     43.461ms UpdateAndMarkImageModUnionTable\nI/art     (23546):     0ms/112.712ms RecursiveMark\nI/art     (23546):       112.712ms ProcessMarkStack\nI/art     (23546):     0.610ms/2.777ms PreCleanCards\nI/art     (23546):       0.305ms/0.855ms ProcessCards\nI/art     (23546):         0.153ms ImageModUnionClearCards\nI/art     (23546):         0.610ms ZygoteModUnionClearCards\nI/art     (23546):         0.610ms AllocSpaceClearCards\nI/art     (23546):         0.549ms AllocSpaceClearCards\nI/art     (23546):       0.549ms MarkRootsCheckpoint\nI/art     (23546):       0.610ms MarkNonThreadRoots\nI/art     (23546):       0ms MarkConcurrentRoots\nI/art     (23546):       0.610ms ScanGrayImageSpaceObjects\nI/art     (23546):       0.305ms ScanGrayZygoteSpaceObjects\nI/art     (23546):       0.305ms ScanGrayAllocSpaceObjects\nI/art     (23546):       1.129ms ScanGrayAllocSpaceObjects\nI/art     (23546):       0ms ProcessMarkStack\nI/art     (23546):   0ms/0.977ms (Paused)PausePhase\nI/art     (23546):     0.244ms ReMarkRoots\nI/art     (23546):     0.672ms (Paused)ScanGrayObjects\nI/art     (23546):     0ms (Paused)ProcessMarkStack\nI/art     (23546):     0ms/0.610ms SwapStacks\nI/art     (23546):       0.610ms RevokeAllThreadLocalAllocationStacks\nI/art     (23546):     0ms PreSweepingGcVerification\nI/art     (23546):   0ms/10.621ms ReclaimPhase\nI/art     (23546):     0.610ms/0.702ms ProcessReferences\nI/art     (23546):       0.214ms/0.641ms EnqueueFinalizerReferences\nI/art     (23546):         0.427ms ProcessMarkStack\nI/art     (23546):     0.488ms SweepSystemWeaks\nI/art     (23546):     0.824ms/9.400ms Sweep\nI/art     (23546):       0ms SweepMallocSpace\nI/art     (23546):       0.214ms SweepZygoteSpace\nI/art     (23546):       0.122ms SweepMallocSpace\nI/art     (23546):       6.226ms SweepMallocSpace\nI/art     (23546):       0ms SweepMallocSpace\nI/art     (23546):       2.144ms SweepLargeObjects\nI/art     (23546):     0.305ms SwapBitmaps\nI/art     (23546):     0ms UnBindBitmaps\nI/art     (23546):   0.275ms FinishPhase\nI/art     (23546): GC iteration timing logger: end, 178.971ms\n\nChange-Id: Ia55b65609468f212b3cd65cda66b843da42be645\n"
    },
    {
      "commit": "52e4b43d62896b56f8c2bd041e528472bb4a0d8d",
      "tree": "3a9367c391418c1375a6c86f678b3f047cacc03f",
      "parents": [
        "ef38670cae8462d579da983c1863f96717cccee6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jun 10 11:22:31 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jun 19 12:57:05 2014 -0700"
      },
      "message": "Add mark compact collector.\n\nThe mark compact collector is a 4 phase collection, doing a normal\nfull mark_sweep, calculating forwarding addresses of objects in the\nfrom space, updating references of objects in the from space, and\nmoving the objects in the from space.\n\nSupport is diabled by default since it needs to have non movable\nclasses and field arrays. Performance numbers is around 50% as fast.\n\nThe main advantage that this has over semispace is that the worst\ncase memory usage is 50% since we only need one space isntead of two.\n\nTODO: Make field arrays and classes movable. This causes complication\nsince Object::VisitReferences relies on these, so if we update the\nfields of an object but another future object uses this object to\nfigure out what fields are reference fields it doesn\u0027t work.\n\nBug: 14059466\n\nChange-Id: I661ed3b71ad4dde124ef80312c95696b4a5665a1\n"
    },
    {
      "commit": "308351ada0008b0cbe1a5afc31c302c975554ee4",
      "tree": "1447c36df5616515d6e7ac35c185721d3c829c4b",
      "parents": [
        "97ed29f800c56a06fd6989e0883e4c97bedd2453"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sun Jun 15 12:39:02 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jun 16 14:01:52 2014 -0700"
      },
      "message": "Change reference processing to use heap references.\n\nRemoves several SetReferents for updating moved referents. Cleaned\nup other aspects of the code.\n\nChange-Id: Ibcb4d713fadea617efee7e936352ddf77ff4c370\n"
    },
    {
      "commit": "530e1b54887b6b5e7d648170096e22a5f1850ea8",
      "tree": "c273698b2e51c29f373c18ece5eac5635bbbe037",
      "parents": [
        "5d4a3fedcb18dadba5f50661e2a6d86890adfcbc"
      ],
      "author": {
        "name": "Fred Shih",
        "email": "ffred@google.com",
        "time": "Mon Jun 09 15:19:54 2014 -0700"
      },
      "committer": {
        "name": "Fred Shih",
        "email": "ffred@google.com",
        "time": "Tue Jun 10 10:33:02 2014 -0700"
      },
      "message": "Reduced frequency of blocks for concurrent gc\n\nImmediately return for references that are marked before reference\nprocessing without blocking. Soft references are kept in the queue until\nthe reference processor stops preserving, after which, all marked\nreferences are removed. Finalizer references will still block on get().\n\nBug: 15471830\nChange-Id: I588fcaef40b79ed7c95a4aa7f4fc2e17ee0c288f\n"
    },
    {
      "commit": "a52c5a695029501c2612f331684c45cf2ba8bcc9",
      "tree": "ae664f7aafc8a193e4e2e7a48e1bbb21b6f089cc",
      "parents": [
        "1eda9c1d570f273c1d9f24438c35c8e25c990261",
        "bfff21aaa05d4fce39481cf7899f7639eb7fd66d"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri May 09 19:47:41 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri May 09 19:47:41 2014 +0000"
      },
      "message": "Merge \"Reference::GetReferent() calls by GC should not trigger read barriers.\""
    },
    {
      "commit": "bfff21aaa05d4fce39481cf7899f7639eb7fd66d",
      "tree": "489efb8743f63ccb1e45197f4ae4c6e67cb9c1c4",
      "parents": [
        "25023c744c4388a6459b21cc3babf8c602b024a2"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri May 09 12:21:15 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri May 09 12:21:15 2014 -0700"
      },
      "message": "Reference::GetReferent() calls by GC should not trigger read barriers.\n\nOtherwise, GC\u0027s reference processing would turn all referents alive\nvia read barriers, which is incorrect.\n\nBug: 12687968\nChange-Id: I1463365981d55fa74a7bb207dd4a16aeec007f8b\n"
    },
    {
      "commit": "2175f52b393c27d3df060acb737762b5a588cb7f",
      "tree": "685f69d686691a8404cd3bda41f4ec57b58b592e",
      "parents": [
        "a17288e3b9dd6751005fed3386251d2d0949be74"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 09 11:01:06 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri May 09 11:19:09 2014 -0700"
      },
      "message": "Fix race condition in ProcessReferences.\n\nThere was a race caused by not setting the is_marked_callback_ to\nnull after doing a non concurrent ProcessReferences which caused a\nsmall window of time during the next concurrent GC where the\nmutator could attempt to use a stale is marked callback.\n\nChange-Id: Ia56e463f4b30623911e041687960388973e5304f\n"
    },
    {
      "commit": "2d1ab0a7bf7639d1af0c453415f9625110c34f6d",
      "tree": "765ff7d49c4a9016bfbdf92a43f2aed2c0d0f4d3",
      "parents": [
        "4884ba0c06fbd167a29a057787f4f35160d2ebd1"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 08 15:27:31 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu May 08 16:59:29 2014 -0700"
      },
      "message": "Use WaitHoldingLocks in ReferenceProcessor::GetReferent.\n\nThe caller may be holding other locks, so we must use this or else\nwe get bad mutexes held errors. Also added a lock level for the\nreference processor.\n\nChange-Id: I364a303a4106982bd9bfaac5b116cea1638ea6d3\n"
    },
    {
      "commit": "78f7b4c04ab6e8b5581921bc95b67a9beee1c246",
      "tree": "78b93c72007478b5bfc3b88ab413fa3d772da723",
      "parents": [
        "052a647973b590c9d5007a2e16f313f4e32a70bd"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 06 10:57:27 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 07 15:28:35 2014 -0700"
      },
      "message": "Add concurrent reference processing.\n\nConcurrent reference processing currently works by going into native\ncode from java.lang.ref.Reference.get(). From there, we have a fast\npath if the references aren\u0027t being processed which returns the\nreferent without needing to access any locks. In the slow path we\nblock until reference processing is complete. It may be possible to\nimprove the slow path if the referent is blackened.\n\nTODO: Investigate doing the fast path in java code by using racy reads\nof a static volatile boolean. This will work as long as there are no\nsuspend points inbetween the boolean read and referent read.\n\nBug: 14381653\n\nChange-Id: I1546b55be4691fe4ff4aa6d857b234cce7187d87\n"
    }
  ]
}
