)]}'
{
  "log": [
    {
      "commit": "90b936ddda63139ff46a6755c3b83ad6e4ab4ac5",
      "tree": "c7ce2c3004eecc16ab41ed7cde105c3019638d4b",
      "parents": [
        "b78a8af993e877d74c5938f65f95feaf2fa01321"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jan 31 08:58:55 2017 -0800"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Feb 03 10:03:52 2017 -0800"
      },
      "message": "ART: Refactor verify_object.h\n\nMove the actual VerifyObject check into a new cc file, as we\ncommonly don\u0027t enable the check at all. This allows to cut the\n-inl include from almost all current users.\n\nThis also exposes missing -inl includes. Also fix up some of our old\nmess where .h defined functions require -inl.h defined functions.\n\nTest: m\n\nChange-Id: I3dd821bbe2015564a29bf1ed9be00f7a7276ad61\n"
    },
    {
      "commit": "b3da36c182329f228b8c78d306a57fa11a6004ea",
      "tree": "707233fdaf345eb0b8068cfde5a1bff4e16aab53",
      "parents": [
        "1e33d05866bd5f146e2341712a1c06037e9d07a2"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Thu Dec 15 13:12:59 2016 -0800"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Wed Jan 04 15:18:22 2017 -0800"
      },
      "message": "Reduce the number of fences needed for monitors\n\nAdd the necessary CasWeakAcquire primitives for LockWords.\n\nHave MonitorEnter initially read the lockword using a\nmemory_order_relaxed operation. In the unlikely case we need more,\ncompensate with an explicit fence.\n\nIn the uncontended case, install the thin lock with Acquire,\nrather than SequentiallyConsistent semantics.\n\nHave MonitorExit use a Release instead of SequentiallyConsistent\nCAS in the ReadBarrier case. Add TODO for the other case.\n\nTogether, these should usually eliminate 3 fences (or acq/rel)\nper critical section.\n\nHave Install() only use Release ordering.\n\nAdd TODO for inflation spinning, which looks to me like it could be\nimproved appreciably.\n\nDrive-by fix:\n\nGetMaxSpinsBeforeThinLockInflation spelling\n\nTest: Build for several targets, boot, m art-test-host art-test-target\n\nChange-Id: I2cab09723252065f6365e4234ee3249c69ece888\n"
    },
    {
      "commit": "12b58b23de974232e991c650405f929f8b0dcc9f",
      "tree": "bc08011e3b9f4c132fc605dc54d1d5f50c932a29",
      "parents": [
        "b0b2080b4cea8365052d1be973e927f8ee85f609"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Nov 01 11:55:29 2016 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Nov 02 16:31:04 2016 -0700"
      },
      "message": "Clean up the runtime read barrier and fix fake address dependency.\n\n- Rename GetReadBarrierPointer to GetReadBarrierState.\n- Change its return type to uint32_t.\n- Fix the runtime fake address dependency for arm/arm64 using inline\n  asm.\n- Drop ReadBarrier::black_ptr_ and some brooks code.\n\nBug: 12687968\nTest: test-art with CC, Ritz EAAC, libartd boot on N9.\nChange-Id: I595970db825db5be2e98ee1fcbd7696d5501af55\n"
    },
    {
      "commit": "ef41db7a3f322a1feb305fdb457410c4cea94d00",
      "tree": "c03152c091ef62ab70f5be0a2fe3a965b189132c",
      "parents": [
        "1458e0c09fe0a3b9fa5fd7beb9b6077d1fc46b1d"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Oct 25 15:08:01 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 26 15:25:40 2016 -0700"
      },
      "message": "Move interpreter to ObjPtr\n\nMoved most of interpreter, interpreter_common,\ninterpreter_switch_impl, and some of mterp to ObjPtr.\n\nBug: 31113334\n\nTest: test-art-host ART_TEST_INTERPRETER\u003dtrue\nTest: art/tools/run-libcore-tests.sh \u0027--mode\u003dhost\u0027 \u0027--variant\u003dX32\u0027 --debug\n\nChange-Id: I0935d18287e1332205c17c5a018aa167788ab897\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": "31e88225b2ef68e7f32f11186acf922c74ddabab",
      "tree": "ca50f60634854056bb652e7c375e5ccca2def5cd",
      "parents": [
        "602142692643d8cd2c48d9aaeece26470f702e3b"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Oct 14 18:43:19 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 17 11:36:39 2016 -0700"
      },
      "message": "Move most mirror:: args to ObjPtr\n\nFixed possible moving GC bugs in ClinitImageUpdate class.\n\nBug: 31113334\n\nTest: test-art-host\nChange-Id: I0bf6578553d58b944aaa17665f1350bdf5ed15ec\n"
    },
    {
      "commit": "51eaa7f5547f9ddea92ce57c6c2df9534d5017b8",
      "tree": "43456ed702c2ee5fe6ca1cbf7e9e53b2a4088109",
      "parents": [
        "c2f1fc70dba4db8751248c4ad15315946f6d13d0"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 12 16:08:35 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 12 17:07:04 2016 -0700"
      },
      "message": "Fix moving GC bug in cloning finalizable objects\n\nIt is not safe to have thread suspension in the PreFenceVisitor. The fix is\nto add the finalizer reference in the caller.\n\nTest: art/tools/run-libcore-tests.sh \u0027--mode\u003dhost\u0027 \u0027--variant\u003dX32\u0027 --debug\n\nBug: 31113334\n\nChange-Id: I1e4650f8b75408a3d07e2c51ac334ff98552cfb5\n"
    },
    {
      "commit": "9d156d500801accee919b6d51e22d6ddcdcd4a05",
      "tree": "92129562c0ba1673c660297f26444a4a2ad31459",
      "parents": [
        "078483d4dfd049d5b3f192a99e2dfdc355e4754f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 06 17:44:26 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Oct 12 09:49:49 2016 -0700"
      },
      "message": "Move Heap parameters to ObjPtr\n\nDeleted some unused object dumping code.\n\nTest: test-art-host\n\nBug: 31113334\n\nChange-Id: I747220caafe6679591fd4b361d7f50383a046164\n"
    },
    {
      "commit": "a058fdf0cf7435a13a6e8cae5e3a9bfa1513828d",
      "tree": "85de1316f29f661372841d5feee16c370375fc16",
      "parents": [
        "c4f3925490a73da8dc74884a1deb965d4ecaf14e"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 06 15:13:58 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Oct 06 15:53:58 2016 -0700"
      },
      "message": "Move mirror::Object setters to ObjPtr\n\nBug: 31113334\n\nTest: test-art-host\n\nChange-Id: I2c4c84645e194c3c435a4a6fd670176b0e98671f\n"
    },
    {
      "commit": "a59d9b228b1eda3bf71a81b6201ec64e26086c23",
      "tree": "91adf9f0e282eec50ccb28aa2dbc432a5e28d13f",
      "parents": [
        "05ce52b406dcf6b9a24287d14f0e611211e0db3d"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Sep 26 18:13:17 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Sep 27 16:10:35 2016 -0700"
      },
      "message": "Use ObjPtr for reflection.cc/h/inl\n\nChanged Pretty helpers to use this to reduce usage of Decode. The\neventual goal is not have almost any calls to ObjPtr::Decode.\n\nMoved ObjPtr out of mirror namespace for convenience. Added more\nPoisonObjectPointers calls in class linker, thread suspension.\n\nBug: 31113334\n\nTest: test-art-host\n\nChange-Id: I44d08db5143d95ed1b65e2f00f9749ef5cf379f7\n"
    },
    {
      "commit": "bdf7f1c3ab65ccb70f62db5ab31dba060632d458",
      "tree": "25cc77adfeb05232d0ab00aa561a693f1d71745c",
      "parents": [
        "d7eabc2cc1a88c1f7f927da61246ae65aab0626c"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 30 16:38:47 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Aug 30 17:02:53 2016 -0700"
      },
      "message": "ART: SHARED_REQUIRES to REQUIRES_SHARED\n\nThis coincides with the actual attribute name and upstream usage.\nPreparation for deferring to libbase.\n\nTest: m\nTest: m test-art-host\nChange-Id: Ia8986b5dfd926ba772bf00b0a35eaf83596d8518\n"
    },
    {
      "commit": "c381c36aacf977f7e314e6a91e47b31b04639f62",
      "tree": "15d70c007bf5523c47337a4ca7f0af0a1100b03e",
      "parents": [
        "47ec97259fefc03978517814a14e07ea4c09d472"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Aug 23 13:27:53 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Aug 24 13:34:32 2016 -0700"
      },
      "message": "Avoid CAS for marking region space bitmap for baker\n\nOnly have the GC thread mark it. This occurs when popping from the\nmark stack. The race where an object may be pushed to the mark\nstack twice is handled by not scanning if it is already marked.\n\nAlso avoid checking is_active when marking from the GC.\n\nEAAC: 1263 -\u003e 1253 (average of 30 runs)\nGC time: 7.21s -\u003e 6.83s (average of 18 runs)\n\nTimings on 960 mhz N6P.\n\nBug: 12687968\n\nChange-Id: I47e98c3e258829d2ba0babd803a219c82a36168c\nTest: test-art-host, debug N6P booting with baker CC.\n"
    },
    {
      "commit": "36a270ae4f288e49493432b7128f899ad579849e",
      "tree": "99f134bbfe111b1c42b1b0c19d8b65175a3e6fc8",
      "parents": [
        "89bd8358c0a69e8cd6456d81d88ef366e261f732"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 28 18:08:51 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Aug 03 15:46:18 2016 -0700"
      },
      "message": "Change one read barrier bit to mark bit\n\nOptimization to help slow path performance. When the GC marks an\nobject through the read barrier slow path. The GC sets the mark bit\nin the lock word of that reference. This bit is checked from the\nassembly entrypoint the common case is that it is set. If the bit is\nset, the read barrier knows the object is already marked and there is\nno work to do.\n\nTo prevent dirty pages in zygote and image, the bit is set by the\nimage writer and zygote space creation.\n\nEAAC score (lower is better):\nN9: 777 -\u003e 700 (average 31 of runs)\nN6P (960000 mhz): 1737.48 -\u003e 1442.31 (average of 25 runs)\n\nBug: 30162165\nBug: 12687968\n\nTest: N9, N6P booting, test-art-host, test-art-target all with CC\n\nChange-Id: Iae0cacfae221e33151d3c0ab65338d1c822ab63d\n"
    },
    {
      "commit": "542451cc546779f5c67840e105c51205a1b0a8fd",
      "tree": "11e09bb5abaee12dddffefbe7e425291076dfa7a",
      "parents": [
        "85c4a4b8c9eabfe16e4e49f9b4aa78c1bf4be023"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 26 09:02:02 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Aug 01 18:54:48 2016 -0700"
      },
      "message": "ART: Convert pointer size to enum\n\nMove away from size_t to dedicated enum (class).\n\nBug: 30373134\nBug: 30419309\nTest: m test-art-host\nChange-Id: Id453c330f1065012e7d4f9fc24ac477cc9bb9269\n"
    },
    {
      "commit": "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": "db8e62dca9232634daecb548bd51f3186004535c",
      "tree": "68c6b8efc5a23b5544acae7ef00b6e15b61d7f4a",
      "parents": [
        "085055f933d76579c32586488951a4497ffcf10e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 30 16:30:21 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 30 17:47:15 2016 +0100"
      },
      "message": "Optimizing: Clean up after const-string sharpening.\n\nDo not look up the String for JIT, just check if it\u0027s in the\ndex cache. Strings on hot paths should already be resolved\nand we don\u0027t want to unnecessarily increase JIT compile time\nto have a chance of improving a cold path.\n\nAlso, change the enum LinkerPatchType to be an inner enum\nclass of LinkerPatch and clean up casts between pointers and\nuint64_t.\n\nChange-Id: Ia6e0513af1a84ce94a3b30edac0c592157d374ec\n"
    },
    {
      "commit": "dfe02f6aafee264478d510b9742ee266ea52e8a8",
      "tree": "d56729901410de2b5cea9395c4686b49c38b245d",
      "parents": [
        "85fdcda926fbab0e5a7b3e8b3541f5d225b2bcdb"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Feb 01 20:15:11 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 02 15:43:05 2016 -0800"
      },
      "message": "Fix remaining read barrier issues in image relocation\n\nAdded a way to disallow read barriers, this makes it easy to find\nthe issues.\n\nBug: 26786304\nChange-Id: I7ebb50832686d03e096a979aae9741239371683f\n"
    },
    {
      "commit": "fbc31087932a65e036a153afab3049dc5298656a",
      "tree": "c728b9039a71db3be9cae888ad5e1afc31f34a13",
      "parents": [
        "c7f4e3a5aeaa23342b4e03b0d751f60ac5c5815c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sun Jan 24 11:59:56 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jan 25 14:22:15 2016 -0800"
      },
      "message": "Revert \"Revert \"Load app images\"\"\n\nThis reverts commit 1bc977cf2f8199311a97f2ba9431a184540e3e9c.\n\nBug: 22858531\n\nChange-Id: Ide00bf3a73a02cba3bb364177204ad1b13f70295\n"
    },
    {
      "commit": "1bc977cf2f8199311a97f2ba9431a184540e3e9c",
      "tree": "580a02752d8e447f6dce7cce01386c7e2a9a87f4",
      "parents": [
        "f7fd970244f143b1abb956e29794c446e4d57f46"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Jan 23 14:15:49 2016 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sat Jan 23 14:15:49 2016 +0000"
      },
      "message": "Revert \"Load app images\"\n\nFails when a method is duplicated (see test 097-duplicate-method)\n\nBug: 22858531\n\nThis reverts commit f7fd970244f143b1abb956e29794c446e4d57f46.\n\nChange-Id: Ib30ae5be00cc568e799290be6b3c8f29cbbe4c20\n"
    },
    {
      "commit": "f7fd970244f143b1abb956e29794c446e4d57f46",
      "tree": "aac1f57ac70747957f609bb46305dfeca87645a1",
      "parents": [
        "95005291d8ebdd1d2ac58ffc5181fef4fbbf2383"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 09 11:16:49 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jan 22 15:01:55 2016 -0800"
      },
      "message": "Load app images\n\nSupport in-place patching of the app image based on boot image\nlocation and app oat location. Only loads for art run test so far\nsince we do not automatically generate app images for app installs.\n\nN5 maps launch time (~200 runs):\nBefore: 930ms\nAfter: 878.18ms\nAfter + image class table: 864.57ms\n\nTODO:\nOatdump support.\nStore class loaders as class roots in image.\n\nBug: 22858531\n\nChange-Id: I9cbc645645e62ea2ed1ad8e139e91af7d88514c1\n"
    },
    {
      "commit": "ed70b4a439acea537d55266bb9b1f309de8cbec9",
      "tree": "a07acec5e5228f21a97fef0d5363b238a4ccef27",
      "parents": [
        "cb6638ff664e3136ccfee3cffb9307e0d43ffbc1"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Nov 17 17:52:15 2015 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Nov 19 10:53:08 2015 -0800"
      },
      "message": "Relax CAS in some uses of Object::AtomicSetReadBarrierPointer.\n\nAside from the call to change the object from gray to black, the CAS in\nAtomicSetReadBarrierPointer doesn\u0027t need to be a release CAS.\n\nCC collector Ritz EAAC GC time: 28.4 -\u003e 26.5s (-6.7%) on N5.\n\nBug: 12687968\n\nChange-Id: Ic162717981b98e7f1e762fd6b27bd0c146187ca4\n"
    },
    {
      "commit": "4bbe7807f313bb8e59131812c31bf31513094f8f",
      "tree": "bf7becbcbcd95a97970e912482e18d4fb255a33e",
      "parents": [
        "3482c271278b30ca7a5c6206b7f80332616f6a84",
        "723e6cee35671d2dd9aeb884dd11f6994307c01f"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Nov 02 23:30:47 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Nov 02 23:30:47 2015 +0000"
      },
      "message": "Merge \"Minor improvements for the CC collector.\""
    },
    {
      "commit": "723e6cee35671d2dd9aeb884dd11f6994307c01f",
      "tree": "d9757c4b954331756239cb8214e8933db46ddad5",
      "parents": [
        "59cc4e8306879ee7066d51dad4cba140e58c7292"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Oct 28 20:59:47 2015 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Nov 02 11:41:08 2015 -0800"
      },
      "message": "Minor improvements for the CC collector.\n\n- Split Mark() and inline its first part.\n- Make sure some other routines are inlined.\n- Add some UNLIKELY\u0027s.\n- Use VisitConcurrentRoots().\n\nRitz EAAC GC time decreased from 28.9 -\u003e 27.6s (-4.5%) on N5.\n\nBug: 12687968\n\nChange-Id: I7bd13f162e7daa2a5853000fb22c5fefc318994f\n"
    },
    {
      "commit": "fed3e2fd4919b58f8e4f8cbc317ee101f3b9af49",
      "tree": "284c4eeec50336a4424a873d1e934481375b2823",
      "parents": [
        "114873103db3d4d6e0da42ca02bad1ea8826443b"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Oct 20 11:11:56 2015 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Oct 21 16:02:43 2015 -0700"
      },
      "message": "Relax some CASes for the CC collector.\n\nThat is, removing some unnecessary memory fences.\n\nWe can use the relaxed CAS for the mark bitmap and reference field/GC\nroot updates because only the atomicity of the updated word matters\nthere.\n\nWe can use the release CAS for the read barrier bits in the lock word\nbecause it needs to make sure the reference field updates are visible\nwhen the object changes black from gray (the field update stores won\u0027t\nbe reordered after the CAS.)\n\nThe CC collector\u0027s Ritz EAAC GC time decreases from 34.7s to\n29.1s (-16%) on N5.\n\nBug: 12687968\n\nChange-Id: If082d5911a25fac695df66263a8f55ce8149b199\n"
    },
    {
      "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": "05792b98980741111b4d0a24d68cff2a8e070a3a",
      "tree": "bad79a387bcbdaefc87c07b388099960ca9caff3",
      "parents": [
        "c26b4512a01d46756683a4f5e186a0b7f397f251"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Aug 03 11:56:49 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Sep 03 17:30:57 2015 +0100"
      },
      "message": "ART: Move DexCache arrays to native.\n\nThis CL has a companion CL in libcore/\n    https://android-review.googlesource.com/162985\n\nChange-Id: Icbc9e20ad1b565e603195b12714762bb446515fa\n"
    },
    {
      "commit": "059ef3ddb2088f926ac452889e0953fdcd646a5e",
      "tree": "36067457d7e4aba11be908ddd235734d29b7c4f2",
      "parents": [
        "f71ad9ede9ae322a897e8fe407208dc35c5dee65"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Aug 18 13:54:21 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Aug 18 16:11:21 2015 -0700"
      },
      "message": "Always visit object class from VisitReferences\n\nWe don\u0027t want to unload classes which have instances.\n\nSlight increase in CMS GC time from ~6.5s to ~7.3s on\nEvaluateAndApplyChanges.\n\nBug: 22720414\nChange-Id: I467ff9c9d55163d2a90b999aef3bdd7b3f648bac\n"
    },
    {
      "commit": "e4275c07e9852a6944f47efa9d0591fceb8e8e36",
      "tree": "92d5e69374f88555f454d137e5d60fb1c925b4d8",
      "parents": [
        "82b844fb449ddc5d7b4e43e71a55eb934a1b0b45"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Aug 06 15:34:15 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Aug 12 15:50:24 2015 -0700"
      },
      "message": "Visit class roots from ClassLoader::VisitReferences\n\nThis causes the classes of a class loader to get marked when that\nclass loader gets marked instead of during class root visiting.\n\nBug: 22720414\n\nChange-Id: If53f042aff1d9f7bf94ecbe6886601edda029b7d\n"
    },
    {
      "commit": "4e2cb098017bf073335ebb02b1bc0a36828cd720",
      "tree": "7dfb6c7b71a747f31d2903c383423aac96a11591",
      "parents": [
        "f64914d7392b7d35c7f35bc917b0797b9c4605ac"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 22 16:17:51 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 22 17:26:05 2015 -0700"
      },
      "message": "Add uninterruptible role\n\nExample error:\ncannot call function \u0027CopyOf\u0027 while mutex \u0027uninterruptible_\u0027 is held\n\nTODO: Add annotation to more locations.\n\nBug: 20072211\n\nChange-Id: I1bbf5a77e3deeafa5898df529cb7cb53a6d010d2\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": "6e1372f19bce533d2b7b1df22570f072cb53ea90",
      "tree": "b91bb1cd3bb190b83165cb82a9f996f4e20b163f",
      "parents": [
        "a96bea54b7e3def5490d169f2bf92be2e68dd001"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 01 11:02:59 2015 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 01 11:02:59 2015 +0100"
      },
      "message": "ART: Fix casts for 64-bit pointers on 32-bit compiler.\n\nBug: 19264997\nChange-Id: Ief45cdd4bae5a43fc8bfdfa7cf744e2c57529457\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": "3b45ef277e4a5f7e0314d5df7ef82e480156ba75",
      "tree": "1df28568b9e7e4e50102b7f834fab6e943c444a5",
      "parents": [
        "c06841dac1443e99e92596f15caa82c99bfee010"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 26 21:34:09 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Wed May 27 08:24:03 2015 -0700"
      },
      "message": "ART: Fix VerifyObject runtime verification\n\nUpdate some bit-rotted code to work again. Most tests now work, for\nsome the verification overhead results in a timeout.\n\nChange-Id: Ieab4f2de474a05e915e24abc93da3c2eeed996eb\n"
    },
    {
      "commit": "eb2baaf20d9059c0fc38141780ec05bea0486c40",
      "tree": "b7a47fac5c37124eaedaf1e925c6c0e29e2aa799",
      "parents": [
        "70d3d1433ee3d33dfdc9f687c94383d527871455"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed May 13 21:14:22 2015 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu May 14 11:26:48 2015 -0700"
      },
      "message": "Print field info on mark sweep invalid ref crash.\n\nBug: 20557050\nChange-Id: I3abb7a44e3b7ed3256653824fd1705aac5f7d72c\n"
    },
    {
      "commit": "9d1e19035a59ff8bf05a09ad880ede99806ba73f",
      "tree": "7eb3c9eb01d4f581f3e354d947300547582fdd38",
      "parents": [
        "3fd79afbb7490f52817f737ecceb694f6618dcf9",
        "848f70a3d73833fc1bf3032a9ff6812e429661d9"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Apr 28 02:04:09 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 28 02:04:09 2015 +0000"
      },
      "message": "Merge \"Replace String CharArray with internal uint16_t array.\""
    },
    {
      "commit": "848f70a3d73833fc1bf3032a9ff6812e429661d9",
      "tree": "b0349b3a40aab5a915af491b100659a5ca9fbbf6",
      "parents": [
        "d14438f0c5071962be7fab572b54687d32d9d087"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Jan 15 13:49:50 2014 -0800"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon Apr 27 18:54:52 2015 -0700"
      },
      "message": "Replace String CharArray with internal uint16_t array.\n\nSummary of high level changes:\n  - Adds compiler inliner support to identify string init methods\n  - Adds compiler support (quick \u0026 optimizing) with new invoke code path\n    that calls method off the thread pointer\n  - Adds thread entrypoints for all string init methods\n  - Adds map to verifier to log when receiver of string init has been\n    copied to other registers. used by compiler and interpreter\n\nChange-Id: I797b992a8feb566f9ad73060011ab6f51eb7ce01\n"
    },
    {
      "commit": "60f63f53c01cb38ca18a815603282e802a6cf918",
      "tree": "4f18427401ead0c790e926672957189a0c0a39eb",
      "parents": [
        "633a37ece49c5afcf3fa9a89692f07d19c56229b"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Apr 23 16:12:40 2015 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Apr 23 21:11:40 2015 -0700"
      },
      "message": "Use the lock word bits for Baker-style read barrier.\n\nThis enables the standard object header to be used with the\nBaker-style read barrier.\n\nBug: 19355854\nBug: 12687968\n\nChange-Id: Ie552b6e1dfe30e96cb1d0895bd0dff25f9d7d015\n"
    },
    {
      "commit": "fac107bdddb5f2370f762e55a89847570e901245",
      "tree": "afde3114490d3deceee2be122f69a84528a5e972",
      "parents": [
        "a4c7aa2ba0485c2c876107ca6e1ce1f835ae23be",
        "692063955ae845d8bd9fa2d22a50a1e06513bdcf"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Apr 13 17:04:58 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 13 17:04:58 2015 +0000"
      },
      "message": "Merge \"JDWP: fix thread_list deadlock\""
    },
    {
      "commit": "c785344b87221f5e4e6473e5b762e4e61fe65dcf",
      "tree": "cd32ad2c2604596a18926f04d4c313dab255ecfd",
      "parents": [
        "a29d93b380c9aeb8270e281aefbdd0c77a430d43"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 27 14:35:38 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Apr 10 12:57:27 2015 -0700"
      },
      "message": "Move ArtField to native\n\nAdd linear alloc. Moved ArtField to be native object. Changed image\nwriter to put ArtFields after the mirror section.\n\nSavings:\n2MB on low ram devices\n4MB on normal devices\n\nTotal PSS measurements before (normal N5, 95s after shell start):\nImage size: 7729152 bytes\n23112 kB: .NonMoving\n23212 kB: .NonMoving\n22868 kB: .NonMoving\n23072 kB: .NonMoving\n22836 kB: .NonMoving\n19618 kB: .Zygote\n19850 kB: .Zygote\n19623 kB: .Zygote\n19924 kB: .Zygote\n19612 kB: .Zygote\nAvg: 42745.4 kB\n\nAfter:\nImage size: 7462912 bytes\n17440 kB: .NonMoving\n16776 kB: .NonMoving\n16804 kB: .NonMoving\n17812 kB: .NonMoving\n16820 kB: .NonMoving\n18788 kB: .Zygote\n18856 kB: .Zygote\n19064 kB: .Zygote\n18841 kB: .Zygote\n18629 kB: .Zygote\n3499 kB: .LinearAlloc\n3408 kB: .LinearAlloc\n3424 kB: .LinearAlloc\n3600 kB: .LinearAlloc\n3436 kB: .LinearAlloc\nAvg: 39439.4 kB\n\nNo reflection performance changes.\n\nBug: 19264997\nBug: 17643507\n\nChange-Id: I10c73a37913332080aeb978c7c94713bdfe4fe1c\n"
    },
    {
      "commit": "692063955ae845d8bd9fa2d22a50a1e06513bdcf",
      "tree": "39771e7a445ec9ff5d6c79bb37ff268e44d8ef64",
      "parents": [
        "1b8e8cac2c96f6d2af8e7217f997a30e11c098b5"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Apr 07 15:54:25 2015 +0200"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Apr 08 12:13:28 2015 +0200"
      },
      "message": "JDWP: fix thread_list deadlock\n\nLimits the scope of Locks::thread_list_lock_ locking in the debugger\nso we do not try to lock it twice when creating a JDWP id (because\ncalling Object::IdentityHashCode may need to take the lock).\n\nBug: 20048099\nChange-Id: I305dd72ccc4d2d007d1603b0d52bcfa94b6842a7\n"
    },
    {
      "commit": "65b798ea10dd716c1bb3dda029f9bf255435af72",
      "tree": "774e9901b6917989a63f07f927c3b4d8b921a013",
      "parents": [
        "c411c6cc327d3f2b3b4d1987b07dd442205d9454"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Apr 06 09:35:22 2015 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Apr 06 14:05:07 2015 -0700"
      },
      "message": "ART: Enable more Clang warnings\n\nChange-Id: Ie6aba02f4223b1de02530e1515c63505f37e184c\n"
    },
    {
      "commit": "daaf3265806eb2eadb2e03302bd68022fab5ca28",
      "tree": "aff5d6d53d6d2b65995aa204839f88ee66400989",
      "parents": [
        "68e22f3b982ff9ccbdfb3b65b7cfc16fcae907ba"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Mar 24 13:30:28 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sun Mar 29 14:13:08 2015 -0700"
      },
      "message": "Add AccessibleObject and Field to mirror\n\nMain motivation is to remove all the functionality / field access on\njava side to ArtField. Also comes with some reflection speedups /\nslowdowns.\n\nSummary results:\ngetDeclaredField/getField are slower mostly due to JNI overhead.\nHowever, there is a large speedup in getInt, setInt,\nGetInstanceField, and GetStaticField.\n\nBefore timings (N5 --compiler-filter\u003deverything):\n\n                       benchmark      ns linear runtime\n          Class_getDeclaredField  782.86 \u003d\u003d\u003d\n                  Class_getField  832.77 \u003d\u003d\u003d\n                    Field_getInt  160.17 \u003d\n                    Field_setInt  195.88 \u003d\n                GetInstanceField 3214.38 \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n                  GetStaticField 6809.49 \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nAfter:\n          Class_getDeclaredField 1068.15 \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n                  Class_getField 1180.00 \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n                    Field_getInt  121.85 \u003d\n                    Field_setInt  139.98 \u003d\n                GetInstanceField 1986.15 \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n                  GetStaticField 2523.63 \u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nBug: 19264997\n\nChange-Id: Ic0d0fc1b56b95cd6d60f8e76f19caeaa23045c77\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": "7380c3175b443cdc6f12a2a3a91df188eaaa5a61",
      "tree": "b79b791111f7cafc1e2d2c481a9fdc142961e98e",
      "parents": [
        "fa04842818fe2d0086872dea311db14a732d52f0"
      ],
      "author": {
        "name": "tony.ys_liu",
        "email": "tony.ys_liu@htc.com",
        "time": "Fri Jan 16 19:16:45 2015 +0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jan 16 13:36:22 2015 -0800"
      },
      "message": "Fix infinite loop in GenerateIdentityHashCode\n\nRoot Cause:\n  If no one changes the seed, it will become infinite loop due to below condition\n    (expected_value \u0026 LockWord::kHashMask) \u003d\u003d 0\n\nSolution:\n  Changes the seed before entering the next loop\n\nAdded test.\n\nBug: 19046417\n\nChange-Id: I7d1c377dd1bda780681514b24d61ebc776bc80ab\n"
    },
    {
      "commit": "2d7210188805292e463be4bcf7a133b654d7e0ea",
      "tree": "7705a3bf841ae44b2396728fa22ed0b5dcb44dbf",
      "parents": [
        "e0491682d101c69bf88c3c24a965312129cbfa38"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Nov 10 11:08:06 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Nov 18 12:27:37 2014 -0800"
      },
      "message": "Change 64 bit ArtMethod fields to be pointer sized\n\nChanged the 64 bit entrypoint and gc map fields in ArtMethod to be\npointer sized. This saves a large amount of memory on 32 bit systems.\nReduces ArtMethod size by 16 bytes on 32 bit.\n\nTotal number of ArtMethod on low memory mako: 169957\nImage size: 49203 methods -\u003e 787248 image size reduction.\nZygote space size: 1070 methods -\u003e 17120 size reduction.\nApp methods: ~120k -\u003e 2 MB savings.\n\nSavings per app on low memory mako: 125K+ per app\n(less active apps -\u003e more image methods per app).\n\nSavings depend on how often the shared methods are on dirty pages vs\nshared.\n\nTODO in another CL, delete gc map field from ArtMethod since we\nshould be able to get it from the Oat method header.\n\nBug: 17643507\n\nChange-Id: Ie9508f05907a9f693882d4d32a564460bf273ee8\n\n(cherry picked from commit e832e64a7e82d7f72aedbd7d798fb929d458ee8f)\n"
    },
    {
      "commit": "bbcd30bf9a39e40879426ec703985c96df1d7491",
      "tree": "bb2ffc6c685b2afc333477396856ce05697d3e19",
      "parents": [
        "a8825e4b38ae01fa77d255ca423ab2f2b77c6097"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 30 15:25:36 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 30 15:25:36 2014 -0700"
      },
      "message": "Avoid signed integer overflow in identity hash code.\n\nCaught by -ftrapv.\n\nChange-Id: Ib8dbb31440ccce88a3c3ce7ea3b2394621616eff\n"
    },
    {
      "commit": "cf7f19135f0e273f7b0136315633c2abfc715343",
      "tree": "ffa4d9efd9c45f4b6789acc1f534bb9327052b7e",
      "parents": [
        "aea6888b056be21adf762e066c7f33b8939b8a06"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 22 22:06:39 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 22 22:21:57 2014 -0700"
      },
      "message": "C++11 related clean-up of DISALLOW_..\n\nMove DISALLOW_COPY_AND_ASSIGN to delete functions. By no having declarations\nwith no definitions this prompts better warning messages so deal with these\nby correcting the code.\nAdd a DISALLOW_ALLOCATION and use for ValueObject and mirror::Object.\nMake X86 assembly operand types ValueObjects to fix compilation errors.\nTidy the use of iostream and ostream.\nAvoid making cutils a dependency via mutex-inl.h for tests that link against\nlibart. Push tracing dependencies into appropriate files and mutex.cc.\nx86 32-bit host symbols size is increased for libarttest, avoid copying this\nin run-test 115 by using symlinks and remove this test\u0027s higher than normal\nulimit.\nFix the RunningOnValgrind test in RosAllocSpace to not use GetHeap as it\nreturns NULL when the heap is under construction by Runtime.\n\nChange-Id: Ia246f7ac0c11f73072b30d70566a196e9b78472b\n"
    },
    {
      "commit": "6cdedf0332d707f89a867a8f358d09b3262bf5e0",
      "tree": "2b6361252ec31acd9c2c58b3eb803ac59e93a5a5",
      "parents": [
        "13735955f39b3b304c37d2b2840663c131262c18"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 09 16:29:40 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 09 16:29:40 2014 -0700"
      },
      "message": "Fix object header size for baker read barrier.\n\nChange-Id: I2b4a61488b9017d22210d79a07f485f9afef3b42\n"
    },
    {
      "commit": "cdc1aaffabbdf417d29b203b2cd2763ed2d623f8",
      "tree": "ff56b9bbaa3ce0305c0ef71c055d3664dddfe93a",
      "parents": [
        "bbb1fc6e95f46470979936450b0d3f1e020c5904"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 09 13:21:38 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Oct 09 14:31:29 2014 -0700"
      },
      "message": "Simplify instance reference offsets.\n\nDon\u0027t encode Object\u0027s class. Use trailing rather than leading zeroes to give\noffset position.\n\nChange-Id: I1ae74e7a01f63696429644adf81cdf6ee58832fe\n"
    },
    {
      "commit": "7e70b002c4552347ed1af8c002a0e13f08864f20",
      "tree": "79d5ee5444a5be70130d9a75dd51831c4b15687b",
      "parents": [
        "edc34c88b8f8abd04f9c4668787403608cf0b2d4"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 08 11:47:24 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 08 11:57:59 2014 -0700"
      },
      "message": "Header file clean up.\n\nRemove runtime.h from object.h.\nMove TypeStaticIf to its own header file to avoid bringing utils.h into\nallocator.h.\nMove Array::DataOffset into -inl.h as it now has a utils.h dependency.\nFix include issues arising from this.\n\nChange-Id: I4605b1aa4ff5f8dc15706a0132e15df03c7c8ba0\n"
    },
    {
      "commit": "37f05ef45e0393de812d51261dc293240c17294d",
      "tree": "7c7793862efa52e1deb42babbdcb652c245ab941",
      "parents": [
        "e25826e28ea65d9c1aa23f84788a091c677b20c7"
      ],
      "author": {
        "name": "Fred Shih",
        "email": "ffred@google.com",
        "time": "Wed Jul 16 18:38:08 2014 -0700"
      },
      "committer": {
        "name": "Fred Shih",
        "email": "ffred@google.com",
        "time": "Mon Aug 25 11:16:53 2014 -0700"
      },
      "message": "Reduced memory usage of primitive fields smaller than 4-bytes\n\nReduced memory used by byte and boolean fields from 4 bytes down to a\nsingle byte and shorts and chars down to two bytes. Fields are now\narranged as Reference followed by decreasing component sizes, with\nfields shuffled forward as needed.\n\nBug: 8135266\nChange-Id: I65eaf31ed27e5bd5ba0c7d4606454b720b074752\n"
    },
    {
      "commit": "0fbd6e6ec3241b7163b95f9f001bfe9b08f8b200",
      "tree": "8750bd3360999fa19d8f0f5892baa60348623911",
      "parents": [
        "635561b86ac03f5562bdb779baa6db12f31b3cae"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Jul 17 16:16:31 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Jul 17 16:16:31 2014 -0700"
      },
      "message": "Fix two read barrier bugs introduced in CL 97882.\n\nBug: 12687968\nChange-Id: Ib28da4c33977cc58b09913ef5b738dec75365714\n"
    },
    {
      "commit": "9531f62ef260cbd0d0512e4c96f5d5dd2f4fdbb2",
      "tree": "709512d91bb357131ec9d0881826b7b43d08e95e",
      "parents": [
        "f08f0ca4b9538bff516f354532ced57cf077da66",
        "d8434439dc64add41cdfa69ddf96b960af9050de"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Sat Jul 12 01:07:25 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 11 23:26:34 2014 +0000"
      },
      "message": "Merge \"Call strong CAS from unsafe. Add more CAS versions.\""
    },
    {
      "commit": "d8434439dc64add41cdfa69ddf96b960af9050de",
      "tree": "f1d90394dc3b11fd80397ff702413c8710cf1a65",
      "parents": [
        "3d71f321f4b87ba13113dc0457fd9c3470a2b380"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jul 11 09:56:07 2014 -0700"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jul 11 16:50:37 2014 -0700"
      },
      "message": "Call strong CAS from unsafe. Add more CAS versions.\n\nAdds a number of additional CAS versions.  Calls the correct\none from sun.misc.unsafe, fixing a recently introduced bug.\nAvoid unnecessary ordering constraint when installing hash code.\n\nChange-Id: I7c09d0c95ceb2a549ec28ee34084198ab3107946\n"
    },
    {
      "commit": "98d1cc8033251c93786e2fa8c59a2e555a9493be",
      "tree": "f0a76b8fff060ee484af09028da65a8339d57057",
      "parents": [
        "aebf3cda094f34cf846d19a7724bdc8005267c95"
      ],
      "author": {
        "name": "Mingyao Yang",
        "email": "mingyao@google.com",
        "time": "Thu May 15 17:02:16 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Jul 11 17:17:10 2014 -0700"
      },
      "message": "Improve performance of invokevirtual/invokeinterface with embedded imt/vtable\n\nAdd an embedded version of imt/vtable into class object. Both tables start at\nfixed offset within class object so method/entry point can be loaded directly\nfrom class object for invokeinterface/invokevirtual.\n\nBug: 8142917\nChange-Id: I4240d58cfbe9250107c95c0708c036854c455968\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": "c2bb441a65c5d1dd0b73d04489514ab09bd53c8a",
      "tree": "a19fbf8372a40441812facb27ec0f661bf395f7c",
      "parents": [
        "4479ba35389b03ccc9eabd17fba6168f9505517a",
        "3035961cb41865b80b927546be0c708b6389cec6"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Fri Jun 06 23:45:51 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jun 06 23:45:52 2014 +0000"
      },
      "message": "Merge \"Clean up and augment Atomic class.  Replace QuasiAtomic MemBars.\""
    },
    {
      "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": "61c5ebc6aee2cac1c363de6fbdac25ada1697fdb",
      "tree": "444936c3e3718b692ba7f1981b863190f26b4ed7",
      "parents": [
        "25c4f6a25b3de9b9d7ca5162f1629753a0b7f003"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jun 05 17:42:53 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 06 13:12:17 2014 -0700"
      },
      "message": "Change FieldHelper to use a handle.\n\nFixed compaction bugs related to FieldHelper::GetType in:\nartSet32InstanceFromCode\nSetFieldValueImpl\nCheckReceiver\nField_set\ninterpreter::DoFieldPut\nMethodVerifier::VerifyISGet\nMethodVerifier::VerifyISPut\nMethodVerifier::VerifyIGetQuick\n\nBug: 13077697\n\nChange-Id: I7de9ded2893b5568d43e4daa86fd135bf5508b72\n"
    },
    {
      "commit": "6e83c172f385cb45dd13bbcf41d2df8e410828c6",
      "tree": "e2c2f4ee55cfd623ea9d363286b380213748e1e8",
      "parents": [
        "9a16f222cdf40e68b084316b6e768c14d4b9e020"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu May 01 21:25:41 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu May 01 21:25:41 2014 -0700"
      },
      "message": "Replace the bool kDoReadBarrier template parameter with an enum.\n\nFix one kDoReadBarrier/kIsVolatile mixup in an Object::GetFieldObject\ncall.\n\nBug: 12687968\n\nChange-Id: I896b1137b21a20c0504abd2bf3fe6f83805f3300\n"
    },
    {
      "commit": "b0fa5dc7769c1e054032f39de0a3f6d6dd06f8cf",
      "tree": "839d13ebfa7170967dd9b4abd434b7abda53da99",
      "parents": [
        "948740c1938860df055ddc801f20fd1707331e38"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Apr 28 16:47:08 2014 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Apr 29 14:36:28 2014 -0700"
      },
      "message": "Force inlining on trivial accessors.\n\nMake volatility for GetFieldObject a template parameter.\nMove some trivial mirror::String routines to a -inl.h.\n\nBug: 14285442\n\nChange-Id: Ie23b11d4f18cb15a62c3bbb42837a8aaf6b68f92\n"
    },
    {
      "commit": "17c50db442d2791d9c4d7d1e98060556c323ce9b",
      "tree": "d430ae6fb13e4044de6fe6857fd3dc0e79764f4d",
      "parents": [
        "1b4e3d5bc1e2d604adeda4ebbd137f20ee041138",
        "9103c86a98524e9ddfd14f8cee56e919f68eee9b"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Apr 24 18:12:25 2014 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 24 18:12:25 2014 +0000"
      },
      "message": "Merge \"More code for the read barrier support.\""
    },
    {
      "commit": "9103c86a98524e9ddfd14f8cee56e919f68eee9b",
      "tree": "69e64a2f618e10bb8f060cf7fb70c8e94dc43b50",
      "parents": [
        "f7933e7f295bfe61cb0baf89469581c563032e96"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Apr 22 13:51:07 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Apr 22 14:26:21 2014 -0700"
      },
      "message": "More code for the read barrier support.\n\nMake it possible to disable the RB in Object::SizeOf() (and the\nfunctions it calls transitively) which the collector will need to call\nto get the size of an object when copying.\n\nAdd Object::AtomicSetReadBarrierPointer() for atomic write of a RB\npointer.\n\nBug: 12687968\nChange-Id: Ibedd252860ac7ccd17e4e7d71b377a8892b48ff0\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": "800ac2defde5d12b2f1f313c6b6162560cfa6fc7",
      "tree": "c25e10b68be9be9949e96d3c977fbcf906f22a3a",
      "parents": [
        "5cff3083c00dfbae7b8c5c34b0bedbc514c91df9"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Wed Apr 02 17:32:54 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Thu Apr 03 20:16:44 2014 -0700"
      },
      "message": "Insert an empty read barrier call.\n\nBug: 12687968\nChange-Id: Ie1d28658e16e09f6a983cb5c1f0d5b375b7ae069\n"
    },
    {
      "commit": "624468cd401cc1ac0dd70c746301e0788a597759",
      "tree": "b21c389d43e25c3d95208c9d2f3f1bc81355a4e5",
      "parents": [
        "cfd5acf281b0c509f86b13d73c6a8dfa3ea9922c"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Mar 31 15:14:47 2014 -0700"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Mon Mar 31 17:40:21 2014 -0700"
      },
      "message": "Make the support code for read barriers a bit more general.\n\nAdd an option for Baker in addition to Brooks.\n\nBug: 12687968\nChange-Id: I8a31db817ff6686c72951b6534f588228e270b11\n"
    },
    {
      "commit": "407f702da4f867c074fc3c8c688b8f8c32279eff",
      "tree": "6a856b64f655f5aab1c538eab28e9c69f9010122",
      "parents": [
        "d201dec03334bcc25add81704981a78c19927d87"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Feb 18 14:37:05 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Mar 24 16:35:21 2014 -0700"
      },
      "message": "Refactor object reference visiting logic.\n\nRefactored the reference visiting logic to be in mirror::Object\ninstead of MarkSweep.\n\nChange-Id: I773249478dc463d83b465e85c2402320488577c0\n"
    },
    {
      "commit": "8fa2dad7fe7909c8335101d6c8904ae997cdf29f",
      "tree": "b4809584363705a640b8a4d5c87f9fa2af59c41e",
      "parents": [
        "282cbe489046face5475991aaa1ecb5f1deba107"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 13 12:22:56 2014 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 14 10:15:18 2014 -0700"
      },
      "message": "Refactor reference code into mirror namespace.\n\nAdded two new files: mirror/reference.h and mirror/reference-inl.h.\n\nChange-Id: Ibe3ff6379aef7096ff130594535b7f7c0b7dabce\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": "9d04a20bde1b1855cefc64aebc1a44e253b1a13b",
      "tree": "85b8315677c3d6545ac6c8b27db7cb00b82e68b7",
      "parents": [
        "0f8aa6b38f204ccacd3ac12bb844e628cec2215b"
      ],
      "author": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Fri Jan 31 13:35:49 2014 -0800"
      },
      "committer": {
        "name": "Hiroshi Yamauchi",
        "email": "yamauchi@google.com",
        "time": "Tue Feb 25 13:56:48 2014 -0800"
      },
      "message": "(Experimental) Add Brooks pointers.\n\nThis feature is disabled by default.\n\nVerified that the Brooks pointers are installed correctly by using the\nCMS/SS collectors.\n\nChange-Id: Ia9be9814ab6e29169ac85edc4792ce8c81d552a9\n"
    },
    {
      "commit": "4e30541a92381fb280cd0be9a1763b713ee4d64c",
      "tree": "84093651bbf0ad95b66b846c4f4cf4101994037b",
      "parents": [
        "e266ba9935bd12d685d83f73cd8d759e46c3014d"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Feb 19 10:54:44 2014 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Feb 21 15:24:04 2014 -0800"
      },
      "message": "Fix and optimize verify object.\n\nVerifyObject no longer resides in heap. You can now enable\nVerifyObject for non-debug builds. VerifyStack is still slow, so it\nis now guarded by its own flag.\n\nFixed the image writer to not use verification at places where\nverification fails due to invalid reads.\n\nFixed RosAlloc to use SizeOf which doesn\u0027t call verify object.\n\nAdded a flag paremeter to some of the mirror getters / setters to\nbe able to selectively disable VerifyObject on certain calls.\n\nOptimized the GC to not verify each object multiple times during\nobject scanning if verify object is enabled.\n\nAdded 3 verification options: verify reads, verify this, and verify\nwrites so that you can select how much verification you want for\nmirror getters and setters.\n\nRemoved some useless DCHECKs which would slow debug builds without\nproviding any benefits.\n\nTODO: RosAlloc verification doesn\u0027t currently work with verify\nobjects.\n\nBug: 12934910\nBug: 12879358\n\nChange-Id: Ic61033104dfc334543f89b0fc0ad8cd4f4015d69\n"
    },
    {
      "commit": "d2fe10a3a34af171bf1631219cd2d6ff6b7778b5",
      "tree": "b6b7eb8eba23a5c2723518da99c03bf47b97f58a",
      "parents": [
        "5a3f55ad9519e87c0d3bbddaf3d8a186a887a79b"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Wed Jan 15 10:20:56 2014 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Mon Feb 17 11:32:15 2014 +0100"
      },
      "message": "Remove blacklist\n\nRemoves the class initialization blacklist and use transaction to detect and\nrevert class initialization attempting to invoke native method. This only\nconcerns class initialization happening at compilation time when generating an\nimage (like boot.art for the system).\n\nIn transactional mode, we log every object\u0027s field assignment and array update.\nTherefore we\u0027re able to abort a transaction to restore values of fields and\narray as they were before the transaction starts. We also log changes to the\nintern string table so we can restore its state prior to transaction start.\n\nSince transactional mode only happens at compilation time, we don\u0027t need to log\nall these changes at runtime. In order to reduce the overhead of testing if\ntransactional mode is on/off, we templatize interfaces of mirror::Object and\nmirror::Array, respectively responsible for setting a field and setting an\narray element.\n\nFor various reasons, we skip some specific fields from transaction:\n- Object\u0027s class and array\u0027s length must remain unchanged so garbage collector\ncan compute object\u0027s size.\n- Immutable fields only set during class loading: list of fields, method,\ndex caches, vtables, ... as all classes have been loaded and verified before a\ntransaction occurs.\n- Object\u0027s monitor for performance reason.\n\nBefore generating the image, we browse the heap to collect objects that need to\nbe written into it. Since the heap may still holds references to unreachable\nobjects due to aborted transactions, we trigger one collection at the end of\nthe class preinitialization phase.\n\nSince the transaction is held by the runtime and all compilation threads share\nthe same runtime, we need to ensure only one compilation thread has exclusive\naccess to the runtime. To workaround this issue, we force class initialization\nphase to run with only one thread. Note this is only done when generating image\nso application compilation is not impacted. This issue will be addressed in a\nseparate CL.\n\nBug: 9676614\nChange-Id: I221910a9183a5ba6c2b99a277f5a5a68bc69b5f9\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": "29501cf5663c7951717bae3521815d121a778396",
      "tree": "4673078721c88f8a73ec52a82868e0896149d2d1",
      "parents": [
        "6957616884d7b290f2b8e98e2c4304695799134b"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Feb 07 21:00:25 2014 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Fri Feb 07 21:00:25 2014 -0800"
      },
      "message": "Make primitive getter/setters consistently signed.\n\nUse QuasiAtomic for Cas64, which fixes the MIPS build of ART.\n\nChange-Id: Id1dba264b148a7ce9bcc637159ec733cfbd88b70\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": "c528dba35b5faece51ca658fc008b688f8b690ad",
      "tree": "d95c113a639d07f7e3b88e8a6caa9b5f6e044801",
      "parents": [
        "76f552307ee980221626d1dff0ada56c989d24ca"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Nov 26 12:00:11 2013 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Dec 10 16:00:58 2013 -0800"
      },
      "message": "Enable moving classes.\n\nSlight reduction in Zygote size, memory savings are in the noise.\nBefore: Zygote size: 8739224\nAfter: Zygote size: 8733568\n\nFixed a bug where we didn\u0027t set the concurrent start bytes after\nswitching the allocator from bump pointer to ROSAlloc in the\nzygote. This caused excessive memory usage.\n\nAdded the method verifiers as roots to fix an issue caused by\nRegTypes holding a Class*.\n\nAdded logic to clear card table in the SemiSpace collector, this\nreduces DalvikOther from ~2400k -\u003e ~1760k when using the SemiSpace\ncollector.\n\nAdded a missing lock to the timing loggers which caused a rare\none time crash in std::set.\n\nBug: 11771255\nBug: 8499494\nBug: 10802951\n\nChange-Id: I99d2b528cd51c1c5ed7012e3220b3aefded680ae\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": "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": "d9c4fc94fa618617f94e1de9af5f034549100753",
      "tree": "1305efbbc3d4bc306c0947bb6d4b01553667f98e",
      "parents": [
        "7ef126ce0593929bcf8fb73d8b1119ce3b95b3f2"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Oct 01 19:45:43 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Oct 02 09:31:55 2013 -0700"
      },
      "message": "Inflate contended lock word by suspending owner.\n\nBug 6961405.\nDon\u0027t inflate monitors for Notify and NotifyAll.\nTidy lock word, handle recursive lock case alongside unlocked case and move\nassembly out of line (except for ARM quick). Also handle null in out-of-line\nassembly as the test is quick and the enter/exit code is already a safepoint.\nTo gain ownership of a monitor on behalf of another thread, monitor contenders\nmust not hold the monitor_lock_, so they wait on a condition variable.\nReduce size of per mutex contention log.\nBe consistent in calling thin lock thread ids just thread ids.\nFix potential thread death races caused by the use of FindThreadByThreadId,\nmake it invariant that returned threads are either self or suspended now.\n\nCode size reduction on ARM boot.oat 0.2%.\nOld nexus 7 speedup 0.25%, new nexus 7 speedup 1.4%, nexus 10 speedup 2.24%,\nnexus 4 speedup 2.09% on DeltaBlue.\n\nChange-Id: Id52558b914f160d9c8578fdd7fc8199a9598576a\n"
    },
    {
      "commit": "f7e090ebcded6d6693894c018d89c4add79253ff",
      "tree": "8a7065bde4a404dfafc5b41a034eeb3f2b62bd3a",
      "parents": [
        "7541c745e00b49983f277d6b6b18bc4c174c7e39",
        "11409ae81a3eaf84d7fd2b3c85b8b06d2bae27f0"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Sep 25 21:05:13 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 25 21:05:13 2013 +0000"
      },
      "message": "Merge \"Refactor and improve mod-union tables.\" into dalvik-dev"
    },
    {
      "commit": "11409ae81a3eaf84d7fd2b3c85b8b06d2bae27f0",
      "tree": "a6f10a6360c4ed8012e5893264e68ac4869fde90",
      "parents": [
        "b605a4f9a8797046ea1aa05f3405a77fb9a80a76"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Sep 23 11:49:36 2013 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Sep 25 13:55:02 2013 -0700"
      },
      "message": "Refactor and improve mod-union tables.\n\nAllow support for adding more mod union tables, reduces the amount\nof baked in logic. Adds support for updating mod union table references\nfrom compaction (not for ReferenceCache table yet).\n\nChange-Id: I1beeda00839ed86ef0e853beff5ce10d0ab2b9d1\n"
    },
    {
      "commit": "a3faaf4bece7f42529c013fe87bd41de59798656",
      "tree": "933e312a4aa4d69b2d7da7eda4d592419cec4729",
      "parents": [
        "a9a624b2be2180e6bd33f02c89fb8521376a2e8c"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Sep 03 19:07:00 2013 -0700"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Tue Sep 24 15:18:36 2013 -0700"
      },
      "message": "Fix handling of unresolved references in verifier.\n\nThe verifier should not treat use of unresolved references as a reason to reject\nthe entire class. Instead, the verifier treats the instruction as a throw. If\nthat class is run, the interpreter with extra checks will throw an exception.\n\nBug: 10457426\n\nChange-Id: I3799da843a7ffb3519bbf6dc13a6276519d9cb95\n"
    },
    {
      "commit": "a436fde2762664a3ecdda5eefcadd20b2e104f59",
      "tree": "22431bc387483220728a3bc99ec7314abce3ad60",
      "parents": [
        "10cc81056261625902a8a073bafb9f499eec4ff7"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 27 23:34:06 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 27 23:37:33 2013 -0700"
      },
      "message": "Handle OOMEs in class linker with grace.\n\nCheck for OOMEs and then fail due to them in class loading.\nMake the compiler driver spot OOMEs during resolution and abort compilation to\navoid needless GC thrash then eventual death.\nAllocate the pre-allocated OOME during Runtime::Init as Runtime::Start isn\u0027t\ncalled in the context of the compiler/tools.\n\nChange-Id: Id72199d0fe82001b5bf22758b3cdc9cc4b8efbb9\n"
    },
    {
      "commit": "ea46f950e7a51585db293cd7f047de190a482414",
      "tree": "9dddc8073547a2dcb58a19e1728932a89cb149c3",
      "parents": [
        "5e3572709b5a5d59957f835db4f73760ecef08da"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Jul 30 01:26:50 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Tue Aug 13 18:09:46 2013 -0700"
      },
      "message": "Refactor java.lang.reflect implementation\n\nCherry-picked from commit ed41d5c44299ec5d44b8514f6e17f802f48094d1.\n\nMove to ArtMethod/Field instead of AbstractMethod/Field and have\njava.lang.reflect APIs delegate to ArtMethod/ArtField.\n\nBug: 10014286.\n\nChange-Id: Iafc1d8c5b62562c9af8fb9fd8c5e1d61270536e7\n"
    },
    {
      "commit": "fc0e3219edc9a5bf81b166e82fd5db2796eb6a0d",
      "tree": "5fc7f5b941724a62f8e3411df09fae431ff5e3cf",
      "parents": [
        "56d947fbc9bc2992e2f93112fafb73e50d2aaa7a"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 17 14:40:12 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 17 16:49:05 2013 -0700"
      },
      "message": "Fix multiple inclusion guards to match new pathnames\n\nChange-Id: Id7735be1d75bc315733b1773fba45c1deb8ace43\n"
    },
    {
      "commit": "7940e44f4517de5e2634a7e07d58d0fb26160513",
      "tree": "ac90242d96229a6942f6e24ab137bc1f8f2e0025",
      "parents": [
        "5cd9e3b122f276f610980cbaf0d2ad6ed4cd9088"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 12 13:46:57 2013 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 12 17:49:01 2013 -0700"
      },
      "message": "Create separate Android.mk for main build targets\n\nThe runtime, compiler, dex2oat, and oatdump now are in seperate trees\nto prevent dependency creep.  They can now be individually built\nwithout rebuilding the rest of the art projects. dalvikvm and jdwpspy\nwere already this way. Builds in the art directory should behave as\nbefore, building everything including tests.\n\nChange-Id: Ic6b1151e5ed0f823c3dd301afd2b13eb2d8feb81\n"
    },
    {
      "commit": "4f6ad8ab428038129b2d0d6c40b7fd625cca15e1",
      "tree": "d1025ed9203d0cdf7aa959d9cecd8dc1f0c0bfeb",
      "parents": [
        "aabe8adacc7bf3a8ab6f6f3dd37fc839b6fd762f"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Mar 18 15:27:28 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Mon Mar 18 15:29:59 2013 -0700"
      },
      "message": "Various performance improvements.\n\nPerformance had regressed due to verify object and method invocation changes.\nAvoid trampolines for static calls in same class.\nVarious inlining changes.\nMake verify object something that\u0027s only compiled-in in debug builds.\n\nChange-Id: Ia261a52232c3b10667c668f8adfadc0da3048bc5\n"
    },
    {
      "commit": "04d7aa92bc5548bc4d272b9480614f06248194cc",
      "tree": "2b399853daab91995488c7d19a694063262f6531",
      "parents": [
        "aed0716b9592bb3095cdfc4b111011f9ed74877d"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sat Mar 16 14:29:17 2013 -0700"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Sat Mar 16 14:29:17 2013 -0700"
      },
      "message": "Fix object verification.\n\nRefactor VERIFY_OBJECT_ENABLED to become less brittle to change enum and global\nconstant.\n\nChange-Id: Ie405106be81dce9a913730c7f46a5659582fa18b\n"
    },
    {
      "commit": "05f3057d6a4d23d712092ccd36a531590bff323b",
      "tree": "3f342c813afdb44a08466e379c060f917d073e5a",
      "parents": [
        "4aeb567fa8b1f5e17ef7beacf86fed505cc7335c"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Feb 20 12:13:11 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Feb 20 12:15:09 2013 -0800"
      },
      "message": "Move monitor related object routines to object-inl.h\n\nAlso pass through readily available self Thread. Remove unused wait method.\nRename ObjectLock.Wait to document it doesn\u0027t honor interrupts.\n\nChange-Id: I991e5036997b3f60ee4fdf1a420beabab9a70c85\n"
    },
    {
      "commit": "2dd0e2cea360bc9206eb88ecc40d259e796c239d",
      "tree": "9d619dc9508cbe73e4793bf6f08cbc761abfb48a",
      "parents": [
        "ac21b797b3a425975d656d6b84a7b24401d35f42"
      ],
      "author": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Thu Jan 24 12:42:14 2013 -0800"
      },
      "committer": {
        "name": "Ian Rogers",
        "email": "irogers@google.com",
        "time": "Wed Jan 30 16:48:31 2013 -0800"
      },
      "message": "Directory restructuring of object.h\n\nBreak object.h into constituent files.\nReduce number of #includes in other GC header files.\nIntroduce -inl.h files to avoid mirror files #include-ing each other.\nCheck invariants of verifier RegTypes for all constructors.\n\nChange-Id: Iecf1171c02910ac152d52947330ef456df4043bc\n"
    }
  ]
}
