)]}'
{
  "log": [
    {
      "commit": "aad75c6d5bfab2dc8e30fc99fafe8cd2dc8b74d8",
      "tree": "c1b9e1eabcf35c5cbb5b4f46313a4e062f2d5d51",
      "parents": [
        "82d4838d6bb3480cd25327cedc5179fb2d86881c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 03 08:46:48 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 04 17:51:46 2016 +0100"
      },
      "message": "Revert \"Revert \"Store resolved Strings for AOT code in .bss.\"\"\n\nFixed oat_test to keep dex files alive. Fixed mips build.\nRewritten the .bss GC root visiting and added write barrier\nto the artResolveStringFromCode().\n\nTest: build aosp_mips-eng\nTest: m ART_DEFAULT_GC_TYPE\u003dSS test-art-target-host-gtest-oat_test\nTest: Run ART test suite on host and Nexus 9.\nBug: 20323084\nBug: 30627598\n\nThis reverts commit 5f926055cb88089d8ca27243f35a9dfd89d981f0.\n\nChange-Id: I07fa2278d82b8eb64964c9a4b66cb93726ccda6b\n"
    },
    {
      "commit": "496577fb4d6d7baea9c093d35d17e208c831bbca",
      "tree": "1da9976883a8fea0dc05a58ec9bbd347b010fc19",
      "parents": [
        "304533ed8475e9438e6ca7ef5fa644fd5dab5e97"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Sep 20 15:33:31 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 23 15:27:26 2016 -0700"
      },
      "message": "Smarter image layout\n\nPut strings in the dex file that resolves them.\n\nDepth first traversal with overrides for class and dex cache. The\nwork list keeps track of what oat_index with each pushed item. This\nmeans the static fields of a class will usually be in the same image.\n\nAdded layout test to image_test to make sure things are somewhat\nreasonably attributed.\n\nBug: 28640955\n\nTest: test-art-host\n\n(cherry picked from commit 4e9c4e746617bad6a012d799d2f5cf9e01d24ea2)\n\nChange-Id: I67a536c33aeed603b252d8e0f75622c9efbf2559\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": "c9dbb1df3b5c06ba122cacaf35b17cb53c6be3c6",
      "tree": "d9b8f3c81c0abc7ce6839d0723271ee9740a267c",
      "parents": [
        "f102faf1bcbdb2149e3e7bf27b1819f621b7894b"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 03 17:47:32 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jun 06 11:26:32 2016 -0700"
      },
      "message": "Revert \"Revert \"Hold dex caches live in class table\"\"\n\nBug: 29083330\n\nThis reverts commit f102faf1bcbdb2149e3e7bf27b1819f621b7894b.\n\nChange-Id: Ibc6d260247b3113beec7d33552061512a36c9ce8\n"
    },
    {
      "commit": "f102faf1bcbdb2149e3e7bf27b1819f621b7894b",
      "tree": "d3e9d667bc7d746a0800e95d4ce78918718a9636",
      "parents": [
        "d6d49e56c2b7b11f474acb80cb02bb1fe9b7861e"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Sat Jun 04 00:22:32 2016 +0000"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Sat Jun 04 00:22:32 2016 +0000"
      },
      "message": "Revert \"Hold dex caches live in class table\"\n\nThis reverts commit d6d49e56c2b7b11f474acb80cb02bb1fe9b7861e.\n\nBug: 29083330\nChange-Id: Ie209b27897b8079f2d13fd0837fe5f83a7e61afc\n"
    },
    {
      "commit": "d6d49e56c2b7b11f474acb80cb02bb1fe9b7861e",
      "tree": "b6df3e71798c9a547e56dcbe7d7b7a6f3dc003a2",
      "parents": [
        "b089eccf503646e6ed2d5bb20d973d9131166655"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jun 02 11:48:30 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 03 12:45:04 2016 -0700"
      },
      "message": "Hold dex caches live in class table\n\nPrevents temporary dex caches being unloaded for the same dex file.\nUsually this is OK, but if someone resolved a string in that dex\ncache, it could leave stale pointers in BSS. Also it can use extra\nmemory in linear alloc if we allocate dex cache arrays multiple\ntimes.\n\nBug: 29083330\n\n(cherry picked from commit f284d448e3edd428b6ade473d0993028638b2064)\n\nChange-Id: Ie1b0b0cf835a998e19227cbb90014011a6cd40c4\n"
    },
    {
      "commit": "92091bde26fb9fc54b7e5f459b696d4b88ea30de",
      "tree": "21bc4b8ff193efa3574bed7c6629ec6102b560c4",
      "parents": [
        "ab249381b4757e96da31c0cdcaf889861d1cc928"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue May 10 18:13:20 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed May 11 14:05:03 2016 -0700"
      },
      "message": "Prevent ArtMethod clearing race\n\nThere was race condition where the GC would be visiting the methods\nof a class while the class linker overwrote the contents with 0xFE\nwhen copying to a new array.\n\nSince the GC is holding the class table lock at this time, we can\nuse this lock in the class linker to prevent the race.\n\nBug: 28699001\n\n(cherry picked from commit 10c5f56423feaf3eadb3d4c09c61d2b998404162)\n\nChange-Id: I5ddca93106cb8e48962cf44e5ce434c45e05cd0c\n"
    },
    {
      "commit": "1609e3a42051769f4a8be3b6731e7bb2f828b3bb",
      "tree": "62f33befd42f6109931e003742fe3ab03ff3c74b",
      "parents": [
        "657887ebcd26cf0eae7c40d8ea35bd33186903e7"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Apr 05 14:36:57 2016 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Apr 05 16:10:55 2016 -0700"
      },
      "message": "Shard classloader classes lock\n\nUsed to guard adding and removing classes.\n\nPreviously we used the class linker classes lock, but this had\na deadlock issue since the reference processor may need to acquire\nthe lock to mark the classes of a class loader. Another thread could\nbe blocked trying to access weak globals while also holding the\nclass linker classes lock.\n\nBug: 27946564\nChange-Id: If7c13e8775f0912e104d1382eacdba7e7edf6818\n"
    },
    {
      "commit": "88027bd6810b9a5b785dba5396eec5301e4540b2",
      "tree": "5e385f663cfbe85c7db7eeb48d6f9645c1850d65",
      "parents": [
        "7f459f5859e5f01c92c3711e7d63c062f510b416"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Mar 02 16:08:31 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Mar 04 13:32:28 2016 -0800"
      },
      "message": "Only visit app image classes in class loader\n\nOnly update dex cache arrays of added classes since the declaring\nclass is in image DCHECK fails for other classes in the class loader.\n\nAlso some cleanup to prevent app images leaving invalid state if\nthey get rejected.\n\nBug: 22858531\nBug: 27431418\n\n(cherry picked from commit 6973100705716bffce3768a8a0908d7ca1d02ec1)\n\nChange-Id: Ib05364c44f2b943e3341ef2b1dd43337833de143\n"
    },
    {
      "commit": "1aa8ec2ccdd7bedb6d30d91c89f1e94ab23c4439",
      "tree": "7b2079631ed5d8350c63c7ed3f6d0393e951ce8c",
      "parents": [
        "c3cf1d2e35a45bd2e2c60fbc9c2a1a6a56dfc529"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Feb 01 10:34:47 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Feb 01 19:58:25 2016 -0800"
      },
      "message": "Fix up dex cache strings stored in classes\n\nPreviously we left the image pointer instead of fixing up the pointer\nto the one in the BSS. This only showed up because JIT does the same\nas boot image, bypassing null check.\n\nFixed a bug where oat files without embedded dex cache arrays would\nget their dex cache arrays corrupted.\n\nAdded a non virtual class visitor for performance.\n\nBug: 26846419\nBug: 22858531\n\nChange-Id: I8cd0d61e440f753b4628ddb8c932eb23a0a81027\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": "1f47b678db70d57aa5194266651a8f4336fc851e",
      "tree": "a87144657ae8d824f80465019a094fef8ac35c4c",
      "parents": [
        "b7332f1c774c675b5264a45890e72bf140664018"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 07 16:29:01 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 07 18:33:06 2016 -0800"
      },
      "message": "Re-enable class table for image writer\n\nChanges, create one temporary class table per ImageInfo. Don\u0027t keep\ntrack of class loaders.\n\nBug: 26317072\n\nChange-Id: I4f9121194f39031fb8629d60b6feeb2747a77870\n"
    },
    {
      "commit": "41dc8cef5d1f86e3ade30b8aaf20d29d8d0c712b",
      "tree": "000d84e9b7d321b86349da577f744977ecf191d6",
      "parents": [
        "bf0e73604f836e3b8f7d6481e83110c3426350b6"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Dec 04 15:07:48 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Dec 04 15:19:10 2015 -0800"
      },
      "message": "Combine class sets when writing a class table\n\nReduces the boot.art size since we allocate a new class set with the\ndefault load factor. The load factor in the combined class table is\nhigher to pruning classes, this reduces the size of the boot image.\n\nAlso fixes the hypothetical case where the class table being written\nhas multiple class sets.\n\nBoot.art size\nBefore: 8122368\nAfter: 8044544\n\nSlight cleanup in patchoat.cc.\n\nBug: 22858531\nChange-Id: I31b3ea2004ece6f6c853ee906074bb2792dee958\n"
    },
    {
      "commit": "208a5cb383dd9dcd3461f89b74af5df67dc8d794",
      "tree": "9ed531a445d24a7685e577b1c5822e50dc1c1b1d",
      "parents": [
        "5337bbfbd1cd502bb2842698a6b2a543ab6a6c32"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Dec 02 15:44:07 2015 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Dec 03 16:29:03 2015 -0800"
      },
      "message": "Store class tables in the image\n\nReduces how long it takes to load an application image.\n\nN5 boot.art size\nBefore: 8007680\nAfter: 8122368\n\nAlso reduces boot time by how long AddImageClassesToClassTable\nused to take (~20ms).\n\nChanged class hashes to be uint32_t to fix cross compilation. We need\nserialized hash tables to be valid with different pointer sizes.\n\nBug: 22858531\n\nChange-Id: I463fc83f499ff75f509e80c253a55b9116ee5b89\n"
    },
    {
      "commit": "00310e0bb4ee541b99f0b687dbf5f706db2aabca",
      "tree": "bbb0bc2f829ed2ce145ca142c85da6181e2cd527",
      "parents": [
        "3ae313d9bc64eaa0c791452dd972654eae979496"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Sat Oct 17 12:46:42 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Oct 19 12:30:45 2015 -0700"
      },
      "message": "Keep dex files live in class table\n\nThe DexFile.loadClass API allows callers to load classes using a\ndex file without having that dex file owned by the specified class\nloader. We now add the dex file to the class table to make sure it\nstays live until the class loader is unreachable.\n\nFixes interpreter gcstress test 087 with 64 bit.\n\nBug: 22720414\nChange-Id: Ia4341149f45b6293312f8b275c7a68cea179f718\n"
    },
    {
      "commit": "9b1c71ec77d92d63f1c2183b0cd3588727b2c265",
      "tree": "1f8cfa8487497a24cd8fdb0269242ea9e6873544",
      "parents": [
        "5fbb15fe05fb8814907e00fdc0ca34d9b6113c9f"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Sep 02 18:51:54 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Sep 04 15:44:45 2015 -0700"
      },
      "message": "Make class loaders weak roots\n\nMaking the class loaders weak roots in the class linker prevents them\nfrom keeping the classes as live. However we currently do mark them\nas strong roots to make sure no accidental class unloading occurs\nuntil the logic to free from linear alloc is complete.\n\nBug: 22720414\n\nChange-Id: I57466236d9ce6fd064dda9a30ce8ab68094fb8b0\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": "90ef3db4bd1d4865f5f9cb95c8e7d9afb46994f9",
      "tree": "3c6f8989e0c6e027382a3c08d221ba97afd72291",
      "parents": [
        "1cf85515600d298a2c9e4de137c0926949205097"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Aug 04 15:19:41 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Aug 04 18:56:54 2015 -0700"
      },
      "message": "Address some comments and clean up\n\nChange-Id: I538cf204f1c89d5fc81f8fc5e5800fcf1cf87359\n"
    },
    {
      "commit": "e0671ce5a6cb34e44e3afefa8e29c0c3e30d2855",
      "tree": "124d68a72435aebb5698e068c12555f121282cca",
      "parents": [
        "aac046772b6d0b8dd23f3296fd82b29ef35dca25"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jul 28 17:23:28 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Jul 29 10:01:59 2015 -0700"
      },
      "message": "Clean up class visitors\n\nMove from function pointers to virtual function visitors.\n\nChange-Id: I68cb83c1d2ed9b5a89f8e534fe7ca4bbc1c91f45\n"
    },
    {
      "commit": "cc5ebdf29ea47e24e79279169e0192dfc08b38c8",
      "tree": "f808593b096046cc8f0ca2a8e6675474ea59000e",
      "parents": [
        "1a4d013b9f810f24bdca60c02da99f7650bcc367"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jul 27 11:19:43 2015 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jul 28 16:32:09 2015 -0700"
      },
      "message": "Split the class table for each class loader\n\nEach class loader now has its own class table. This makes it easier\nto mark classes when a classloader is marked.\n\nFixed a bug in LookupClass where we used to look ignore the return\nvalue of InsertClass.\n\nBug: 22720414\n\nChange-Id: If2cd717989a20a6e245ebec24ad52dc47dd3207d\n"
    }
  ]
}
