)]}'
{
  "log": [
    {
      "commit": "88dbad33ae92167a89a5d5469f39f41624535dbf",
      "tree": "b3b0c864c12c246117143954f16df054309852c6",
      "parents": [
        "c58dca3941459b4375a53925f3471373584eab5e"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jun 26 19:54:12 2018 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Oct 25 09:52:28 2018 -0700"
      },
      "message": "ART: Do some include-what-you-use\n\nHelp with transitive includes. In preparation for new\nspecialized headers reducing transitivity.\n\nBug: 118385392\nTest: mmma art\nChange-Id: Ib465ecceec3331ea81588fb4a43eb65e766b6904\n"
    },
    {
      "commit": "6834d3414308e3d536bc685dbb3d60fe70186f23",
      "tree": "7c579de52d3acc5cc4d02babf25c7fcb2b94793b",
      "parents": [
        "c7aa87e1666ac48ddf9149cfdfd64b026b3969e5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 25 13:12:09 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 25 14:12:31 2018 +0100"
      },
      "message": "Remove mirror::Reference::java_lang_ref_Reference.\n\nAnd some #include cleanup after previous CLs removing\nstatic GcRoot\u003c\u003es.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 31113334\nChange-Id: I56b34637f9d793ed7680696a1eeedd07d061ad00\n"
    },
    {
      "commit": "88591fe82f499de10591f5b77efac71f8954eae2",
      "tree": "bfa126ad55ee091e3b615bd3bb60d5f8cfb6e37a",
      "parents": [
        "e8a4e378c5a928d5de07bee6db99150a57dabcd8"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Mar 06 13:35:43 2018 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Mar 23 15:01:15 2018 +0000"
      },
      "message": "ART: Simplify atomic.h\n\nPrefer std::atomic operations over wrappers in atomic.h. Exceptions\nare cases that relate to the Java data memory operations and CAS\noperations.\n\nBug: 71621075\nTest: art/test.py --host -j32\nTest: art/test.py --target --64 -j4\nChange-Id: I9a157e9dede852c1b2aa67d22e3e604a68a9ef1c\n"
    },
    {
      "commit": "be4c2bd892bd167a50b4dfa7133e70a809197698",
      "tree": "150898533382fb98c160e265a5f31f66ded754f0",
      "parents": [
        "bfce631960ae2ab381180beb55cf34ab3b445aaa"
      ],
      "author": {
        "name": "Alexey Grebenkin",
        "email": "a.grebenkin@samsung.com",
        "time": "Thu Feb 01 19:09:59 2018 +0300"
      },
      "committer": {
        "name": "Artem Udovichenko",
        "email": "artem.u@samsung.com",
        "time": "Tue Mar 13 17:01:21 2018 +0300"
      },
      "message": "Fix dangling SingleImplementations left after class unloading\n\nTest: make test-art-host, manual using sample code\n\nbug: 73143991\n\nChange-Id: I4d56b39c69d4ed60266a8b90b9e9d18fba7b8227\n"
    },
    {
      "commit": "4557b3858a66aa20e42bce937e1f0620aad880a2",
      "tree": "8f34d8f014b11f17c6351bb955fcc74c940b8d16",
      "parents": [
        "90f20973356900e340998e8e2b34230e5c4c8fb0"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 03 11:47:54 2018 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 03 12:45:40 2018 +0000"
      },
      "message": "ART: Rename Atomic::CompareExchange methods\n\nRenames Atomic::CompareExchange methods to Atomic::CompareAndSet\nequivalents. These methods return a boolean and do not get the witness\nvalue. This makes space for Atomic::CompareAndExchange methods in a\nlater commit that will return a boolean and get the witness value.\n\nThis is pre-work for VarHandle accessors which require both forms.\n\nBug: 65872996\nTest: art/test.py --host -j32\nChange-Id: I9c691250e5556cbfde7811381b06d2920247f1a1\n"
    },
    {
      "commit": "72041a0dcb5b7c133b79a1d6783a23039f2136bd",
      "tree": "8de4326eff202726c1ab893c536190aba87334be",
      "parents": [
        "9ce960ab2b4c789ad364ad96ec5c660c60e4f90c"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jul 14 18:23:25 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jul 28 17:09:39 2017 -0700"
      },
      "message": "Use class unloading in dex2oat for verify and extract\n\nUnload the main classloader in between each dex file compilation to\nreduce RAM. This frees the whole java heap and associated linear\nallocs. This is only used for quickening since filters that do\ncompilation may require loaded classes in the compiler and oat\nwriter.\n\nThis reduces dex2oat peak PSS for compiling a large app from 196MB\nto 135MB.\n\nOnly works for verify and extract since the current approach is\nincompatible with oat writer patching. b/63911263\n\nAdded a verification override that reads the compiled class status\nto avoid ever verifying classes that were quickened (since this\nis not supported and causes failures).\n\nThere is still some duplicated verification for some class with\nsuperclasses in other dex files.\n\nSupport for quicken will be added in a follow up CL.\n\nBug: 63467744\nTest: test-art-host\nTest: test/testrunner/testrunner.py --interpreter --host -j40\nChange-Id: Id0e4f84eb5db91d6143f752b498f4832a5b25b6e\n"
    },
    {
      "commit": "508fdf3eb53824f109c89f98484927085bdc43ba",
      "tree": "4ed08886adc50962b7fd46936923e29057e2fdb2",
      "parents": [
        "2ff3b97500b717f69415ae474d5cfb1613cd15ee"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 05 16:42:13 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jun 05 20:28:21 2017 -0700"
      },
      "message": "ART: Small class-inl.h cleanup\n\nRemove unnecessary class_linker-inl.h include, and fix up all\ntransitives (mainly gc_root-inl.h). Also clean up reference.h.\n\nTest: m test-art-host\nChange-Id: I47bd6edcfe4a23821e37a6e6fa8cca91d0d2d226\n"
    },
    {
      "commit": "fdd513d6c522841e82f1dc144d19a8d60269b9f7",
      "tree": "1ffbfd68c1271d158de32e1aa438906d3553256d",
      "parents": [
        "1656ca9e6996cb555b4463e5efd4bd7e3f4fb816"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jun 01 11:26:50 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 02 09:38:14 2017 -0700"
      },
      "message": "Move to release CAS for updating object fields\n\nRelaxed cas is not sufficient to make sure threads that read the\nfield will see the copied contents of objects.\n\nBug: 37187694\nBug: 62240510\n\nTest: test-art-host\n\n(cherry picked from commit a1f20c3f8d0dabb9723acccf3ba760acf3ebe62d)\n\nChange-Id: I8bff8a67c2c52eb131714b52e6d842c8c08dd70a\n"
    },
    {
      "commit": "db70ce5e788404f36cb5dbb137c6a8f79f34a2a0",
      "tree": "b291c40e1b6c44f3744404f085706f4b07cbb73c",
      "parents": [
        "7d785fca4fd6cf3507aaa807681b3d73ed586c9b"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Dec 12 11:06:59 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Dec 13 10:12:07 2016 -0800"
      },
      "message": "Address some review comments\n\nAddressed comments in dex cache and class table. Added class table\ntest.\n\nTest: mm test-art-host-gtest-class_table_test -j20\n\nChange-Id: I3ec0282247187acb1ec7af25b309501f001a1c3e\n"
    },
    {
      "commit": "58c3f6a0d15a4340c0a11ab7fbc8c4b990c64b77",
      "tree": "18788ed5f6ffb44679acaee8faff9a5caf237f13",
      "parents": [
        "e4cdd4dbcbc75e373917d22214cd431643cd3610"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Dec 01 14:21:11 2016 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Dec 06 11:01:52 2016 -0800"
      },
      "message": "Reduce calls to DescriptorEquals\n\nStore the low 3 bits of the descriptor hash inside of class set\nentries. Compare these bits before comparing descriptors.\n\nSimpleperf interpret-only compile of facebook:\nmirror::Class::DescriptorEquals(char const*): 3.66% -\u003e 1.03%\n\nBug: 32641252\n\nTest: test-art-host\n\nChange-Id: I8d898d4ac7c95383c49401fbcd85bfde226e026c\n"
    },
    {
      "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": "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": "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": "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": "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": "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"
    }
  ]
}
