)]}'
{
  "log": [
    {
      "commit": "fedff519e0bab2702cbf1ea271cbcb89eeeb52a3",
      "tree": "1219011411161f4f97b935e505f6e166df888d6c",
      "parents": [
        "48516425230845987f5fe3d17e5d0acfc6f82131"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Feb 07 21:36:33 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Feb 22 15:29:12 2021 +0000"
      },
      "message": "Change runtime behavior related to hiddenapi.\n\nWhen resolving a method, if the found method is not accessible, check if\nthere are methods defined in interfaces which are.\n\nBug: 178680596\nBug: 122551864\nTest: 817-hiddenapi\nChange-Id: If7631b30b2eb8eb70d3d0fa1522744fbbd1f66a1\n"
    },
    {
      "commit": "5de5efef38f52f248d1e1c88fdcf3d211aabe712",
      "tree": "fb991b4dbee4d9afecad141bc75dab14893633a1",
      "parents": [
        "18af6447e5963265f6e7e61d6630064f66891f94"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Feb 15 21:23:00 2021 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Feb 18 16:51:21 2021 +0000"
      },
      "message": "Remove pointer-size arguments from DexCache.\n\nThe DexCache is always allocated at runtime now and thus\nit always has runtime pointer-size. Remove the dead code.\n\nTest: m test-art-host-gtest\nChange-Id: Ic21dc20649e1fd70f8981602d75b5690065aec20\n"
    },
    {
      "commit": "6df4511a2cf9ffae0294c1e5136c27ff84cfd1cb",
      "tree": "a29efde60f8ffb947679113d524ae9f6169e0338",
      "parents": [
        "354fbd7e8d38d7888c6c2610cc14cfa55f468fbb"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Sun Feb 07 21:51:58 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 16 09:27:59 2021 +0000"
      },
      "message": "Use vdex assignability types at runtime.\n\nWhen the oat file mentions the class needs to be verified at runtime,\ncheck whether the vdex has assignability types. If it has, and the\nchecks are successful, then the class is verified. Otherwise do a full\nverification to report the actual verification error.\n\nTest: test.py\nBug: 176960283\nChange-Id: I2ba14b72c1d8be3d33f7a699721496a8c15c39f2\n"
    },
    {
      "commit": "c5323fe55f82d91d53ac4ccfd82dde7baa55a4af",
      "tree": "c81fb19ae8c7a12ffb70ea6caa62bcc6c637a742",
      "parents": [
        "b6dda5a1fa90b08d3ebf83a5d1f882e5355bc68b"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Thu Feb 04 21:20:30 2021 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Sat Feb 06 15:59:32 2021 +0000"
      },
      "message": "libartpalette: Use fixed width typedef rather than enum for status\n\nAs the NDK guidelines note, the size of an enum is a compiler choice\nso an enum of unqualifed width cannot be considered stable ABI.\n\nBug: 122824298\nTest: TH\nChange-Id: I63d42fdb5a989aab15ec995529781b1b8c3ddb7a\n"
    },
    {
      "commit": "433547446f7e0ad1b3fcdf993cbaaee9fdb8b9b4",
      "tree": "9760321f707871cc1f4ba5d2db80dd845b66d690",
      "parents": [
        "f80445b3d2e9948003c883c92c218ff37e202445"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 03 15:37:01 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 05 14:21:47 2021 +0000"
      },
      "message": "Cache hashes of virtual methods in j.l.Object.\n\nAvoid calculating them in ClassLinker::LinkVirtualMethods()\nfor each class that declares new virtual methods.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: boots.\nBug: 175869411\nChange-Id: Iae75b1794a6d6ab5073a18c9000ec22550feebf0\n"
    },
    {
      "commit": "b1cf83748ce8165fe7e41ce6a57eb5529946a971",
      "tree": "56fe4acb1a5310cf015467a79427f4de67a53b68",
      "parents": [
        "0f0caf869a9026e723caf79d8f50d8da25bc4185"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 02 13:32:20 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Feb 02 18:08:12 2021 +0000"
      },
      "message": "Fix image bug around clinit and nterp.\n\nnterp trampoline doesn\u0027t do clinit checks, so we should install the\nresolution stub if a method needs a clinit check before being entered.\n\nTest: 818-clinit-nterp\nBug: 178992601\nChange-Id: I9d6b023a6c6620adfcd2a6ed5cd1e042a7cb449b\n"
    },
    {
      "commit": "d1728bfca62a0757000ef3aa0388b5e51269a2a2",
      "tree": "04d75ba364e3ce0c39735a38083383408f9f7cf4",
      "parents": [
        "36e4d1d398a1526c6bc5eba12b32279dc07749d8"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jan 12 14:02:29 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Feb 01 14:48:53 2021 +0000"
      },
      "message": "Add a kTypeChecksFailure.\n\nThis is to distinguish between a soft failure due to type checks, or a\nsoft failure due to other reasons.\n\nA follow-up CL will start using that information and use the type checks\nin the vdex file to perform fast verification at runtime.\n\nTest: test.py\nBug: 176960283\n\nChange-Id: I04bff9ff26033f41e9439d366667a9aec1f339a0\n"
    },
    {
      "commit": "42bee50518ebd23ff2107df86ed0a98737291cc2",
      "tree": "7659d86093b72c0da93141f5aa5f1e5637a4ce11",
      "parents": [
        "2b84cf8a1dbc77df88fafec55ce5f45ff8778268"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jan 28 14:58:35 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jan 29 13:20:38 2021 +0000"
      },
      "message": "Clean up ClassLinker::LinkFields().\n\nMove the function and its helper functions and classes to a\nhelper class ClassLinker::LinkFieldsHelper. Use field index\ninstead of `ArtField*` to make the sorted entries smaller\nand avoid heap allocations for up to 64 fields (up from 16).\n\nAvoid checking for \"Ljava/lang/ref/Reference;\" with costly\nDescriptorEquals() after the early initialization is done.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: boots.\nBug: 175869411\nChange-Id: Ice0a8abe2b85baffc40e1889f2f611eee3be34e8\n"
    },
    {
      "commit": "c7993d55b2912532c1b0917e6b0ca43097bed21d",
      "tree": "1145ce1c0ffbbd729d0a6c1b53c608bf7adb3d6a",
      "parents": [
        "22538e4672348c56d4d44d6113bedd6b47d0abd0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jan 27 15:20:56 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jan 28 14:14:16 2021 +0000"
      },
      "message": "Rewrite ClassLinker::LinkFields().\n\nRewrite field offset assignment to avoid heap allocations in\nmost cases. We do one allocation if there are many fields.\n\nRewrite gap filling to prefer small gaps over big ones. This\ncreates more natural field ordering. For example,\n    class A { byte unalign; }\n    class B extends A {\n        long l;\n\tbyte a, b, c, d, e, f;\n    }\nwould have previously had offsets\n    12, 10, 14, 9, 11, 13, 15\nfor fields a, b, c, d, e, f, respectively. Now these are\n    9, 10, 11, 12, 13, 14, 15\nin line with their lexicographical order.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: boots.\nBug: 175869411\nChange-Id: I558635ac59c959dd85e8a3b015c26a6d90033853\n"
    },
    {
      "commit": "bd728b07434a81d0669255ec551191af7a3bfb8d",
      "tree": "cdb2d3c44b86056c691e742c69a1cec1d017d4a5",
      "parents": [
        "04ea42c39bff591b4a82622f847c34237c8bc69e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 27 13:21:35 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 27 15:42:07 2021 +0000"
      },
      "message": "Add a ScopedTrace when updating code_item and entrypoint in image.\n\nTest: app startup, take a trace\nBug: 177444058\nChange-Id: I54b038a4fb95333a8c7e0b17746ac40b5c2e0f47\n"
    },
    {
      "commit": "c39af9409ed4c8dd711be606f758a9b378cd0ee3",
      "tree": "43f8cc23a07a41fb8fc03be77a15fa203e27194d",
      "parents": [
        "3a73ffb70151dbc99fa41f300a237f8c29783e0e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jan 25 08:43:57 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jan 27 08:29:40 2021 +0000"
      },
      "message": "Add a nterp trampoline in the oat file, replaced at runtime.\n\nTo avoid checking whether an ArtMethod can run nterp when loading an\nimage, record that information directly in the image, and patch the\nentrypoint so nterp can do direct pointer checks when calling an\nArtMethod.\n\nTest: test.py\nBug: 177444058\nChange-Id: Ia87367c37848e1efe33336b3677490c07d7e1767\n"
    },
    {
      "commit": "2c2724cb36cd5a9cec6c852c681efc3b7c6b86ea",
      "tree": "203b76db53f102d031e43ea0632194d4517d6bec",
      "parents": [
        "350c2ff41ff234c71b21f8e653e44be0e23504d9"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Jan 14 19:54:23 2021 -0800"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu Jan 21 00:33:57 2021 +0000"
      },
      "message": "Disable the public SDK Checker during exception throwing\n\nThe compiler will try to throw exception when it cannot\nresolved methods/classes or when there\u0027s an incompatible class\nchange. While doing so, it requires the thrown exception class\nto be initialized.\n\nHowever, when verifying with a public SDK Checker installed,\nit\u0027s possible that the exception class may not initialized due\nto private member access (e.g. serialVersionUid).\n\nSince during verification the exceptions are simply mechanism\nfor the compiler to propagate the verification error it is OK\nto disable the SDK Checker and allow the class to be initialized.\n\nBug: 177017481\nTest: m test-art-host \u0026 manual\nChange-Id: I3765897bf9885b7e26b3ab044002df88866cd3cd\n"
    },
    {
      "commit": "47213e4e3773bfca0348b011831eaaa678cd0791",
      "tree": "822391d79730b46edc76ffd80604ba3eba56aec0",
      "parents": [
        "98873affc25ef6bc96f8c65f828f28530b8f3fcd"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 30 15:12:00 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jan 08 17:00:34 2021 +0000"
      },
      "message": "Small cleanups in artInvokeInterfaceTrampoline\n\n- No need to do a conflict table lookup when the passed method is\n  already the interface method.\n- Remove obsolete test that the IMT entry is indeed a conflict entry.\n- Only call QuickArgumentVisitor::GetCallingMethod when needed.\n\nTest: test.py\nBug: 112676029\nChange-Id: I2d5da474ba3e8e4ad559fc7c13a19b04f4c2a515\n"
    },
    {
      "commit": "771708f3f0a15c1ae50617b4141c5f5dd47bf94f",
      "tree": "b068c02f9becd373095259f4146bf2ff0f344514",
      "parents": [
        "c3c4417c5362b301dc8602d47c860379919a2145"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jan 06 15:45:16 2021 +0000"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jan 08 12:58:04 2021 +0000"
      },
      "message": "Avoid growing boot class path for --single-image compiled images\n\nCalculation of the number of components in Runtime::Init did not\naccount for images compiled with --single-image where the number of\nimages does not equal the number of components.\n\nBug: 160683548\nTest: Treehugger\nChange-Id: I1db7a4bbbc8bb2f48d54f5048bd1b8407d19cf02\n"
    },
    {
      "commit": "aa027b80a4fb57c97cabf1fc8ae72de6b1490a64",
      "tree": "dccec2a9f9fb7613c7184a4fb7f915dae2b098f3",
      "parents": [
        "54ed0150a42297a1a5e477d6569619193fcbffd0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jan 06 20:34:20 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jan 07 12:08:38 2021 +0000"
      },
      "message": "Fix Entry in CheckVTableHasNoDuplicates().\n\nThe Entry constructor initialized Entry.name_len in a call\nto another function as part of the Entry.name initialization\nbut given the order of members, the Entry.name_len was later\noverwritten with 0. When the change\n    https://android-review.googlesource.com/1535207\nreplaced strcmp() with memcmp(), relying on Entry.name_len\nbeing properly initialized, the equality comparison was\nbroken. We fix that by initializing Entry.name_len before\nthe Entry.name and also adjust it for non-ASCII characters.\n\nTest: m dump-oat  # No unexpected logs.\nBug: 175869411\nChange-Id: I08f3425b4dac25adddc4f720c110d85533b99d8b\n"
    },
    {
      "commit": "782fb716122d37dc4c4d7482afb21f6e68be04b4",
      "tree": "fdbf479b04c73f692051dc8abf6efda3114a87e4",
      "parents": [
        "5bcdd17a43fda7ac27968b13f6969133fae40b37"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Dec 23 12:47:31 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jan 06 15:05:34 2021 +0000"
      },
      "message": "Use HashMap\u003c\u003e and HashSet\u003c\u003e in ClassLinker.\n\nExtend the HashSet\u003c\u003e and HashMap\u003c\u003e API with constructors\nthat allow using a stack-allocated initial buffer to avoid\nthe allocation overhead for small containers.\n\nFix HashMap\u003c\u003e implementation for std::pair\u003c\u003e being used\nas the Key. Make Signature copy-assignable so that we can\nuse it as (part of) a Value in HashMap\u003c\u003e.\n\nMove the definition of ClassLinker::MethodTranslation from\nclass_linker.h to class_linker.cc. Add a default constructor\nused for creating empty entries in HashMap\u003c\u003e.\n\nUse HashMap\u003c\u003e and HashSet\u003c\u003e in ClassLinker instead of\nstd::unordered_map\u003c\u003e and std::unordered_set\u003c\u003e as it is much\nfaster thanks to avoiding individual nodes that need malloc\nand free and for small containers we also avoid allocations\nthanks to the extended HashSet\u003c\u003e and HashMap\u003c\u003e API.\n\nAlso avoid unnecessary std::vector\u003c\u003e for FillIfTable() and\nreplace linear search with HashSet\u003c\u003e lookup (note that the\n`ContainsElement()` helper has an overload for std::set\u003c\u003e\nbut not for any other associative container).\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: boots.\nBug: 175869411\nChange-Id: I48722fb3bb7780bf12fb71c7449494e097e4a368\n"
    },
    {
      "commit": "33787687f52798fd5b584edb4c88717d134c367a",
      "tree": "d55000cc678080980e6f4dd99d4acbe032119408",
      "parents": [
        "858cfd81c4fddbc950f9be2e3599b15aabaa501a"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Fri Jul 26 14:27:18 2019 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Dec 08 23:29:58 2020 +0000"
      },
      "message": "SDK-stub controlled dex2oat verification\n\nAllow dex2oat to further limit the resolved (boot classpath) symbols\nduring verification according to an additional list of public SDK files.\n\nThe additional SDKs can be specified as regular classpath (a list\nof dex files) and has the effect of limiting what can be resolved from\nthe boot classpath. The extra checks are performed by comparing the\nsymbol descriptors and do not replace common verification access-checks\nflow.\n\nBug: 111442216\nTest: test-art-host\nChange-Id: Idc13722f34b591d7f858ebeb94bd6f568102b458\n"
    },
    {
      "commit": "86d6cd53385eae365f16f45e1a5947cc6595eb63",
      "tree": "ce94ee1f5d574b2891163f9b9695c97142efd00d",
      "parents": [
        "af17e5f33380ad39d83c31d97a29f3c836150fa1"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed Dec 02 18:13:10 2020 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Fri Dec 04 14:31:35 2020 +0000"
      },
      "message": "Remove DexCache arrays from image.\n\nRemove the hashtable storage from the image and allocate it at\nruntime instead (but keep the DexCache object in the image).\n\nFor compiled code, we have largely moved to using .bss, so the\nDexCache just costs us unnecessary extra space and dirty pages.\n\nFor interpreted code, the hashtables are too small and will be\noverridden many times over at run-time regardless.\n\nThe next step will be to make DexCache variable-size so it can\nadapt to both of the extremes (taking minimal amount of memory\nfor compiled code and avoiding cache evictions in interpreter).\n\nTest: test.py --host\nChange-Id: I9f89e8f19829b812cf85dea1a964259ed8b87f4d\n"
    },
    {
      "commit": "e1d2dce0cda2d223ac9c4e48958b9d5810e3e987",
      "tree": "3b9a664710cad714ad2ee1f9fec60908408aa23f",
      "parents": [
        "9dfb1a9d642b9eb627895ef3364736fc839b4fe4"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 21 10:06:31 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 23 08:12:33 2020 +0000"
      },
      "message": "Add support for compact dex files in nterp.\n\nTest: test.py\nBug: 112676029\nChange-Id: I604af166dab0647037bf675cabc6ce433053a83c\n"
    },
    {
      "commit": "1d4f009209c35e91c41c915e21e3b59a731925f8",
      "tree": "63428eec8b2397cccdba81e9df37faa54081a8bc",
      "parents": [
        "fb9b09d50ccab5e9de5b79bed4f943cc1ac0b74d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Aug 07 14:01:05 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Sep 17 13:46:20 2020 +0000"
      },
      "message": "Call dex2oat and runtime hooks when creating / loading oat/dex files.\n\nTest: m\nBug: 162715919\nBug: 134558686\nChange-Id: I293310106b8dcd7bec22d8790fd5f72b315776a8\n"
    },
    {
      "commit": "556502910526d935093eae3d2e7f79b02245fc66",
      "tree": "fc98b3c8196bdd2abe8889397ad2133a1b7beb21",
      "parents": [
        "e82dee02b24fe50bb48a05d5a3be8c41fbbb00ba"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Sep 14 12:21:04 2020 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Sep 15 17:15:11 2020 +0000"
      },
      "message": "Improve logging for missed fields\n\nPretty print fields that are not assigned to an offset.\n\nBug: 168097035\nTest: make\n\nChange-Id: Ia389165d5a560cf69f396dbef7e98972b1da5e90\n"
    },
    {
      "commit": "4717175e40a19e79af904dfb7b7dd13f046debd7",
      "tree": "426f040eacf5a8305f8bb8d504bd509824d984c8",
      "parents": [
        "1faacf59b9f74e9d2de4e0331ef0cdfcf132225d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Aug 31 15:03:20 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Sep 07 07:29:59 2020 +0000"
      },
      "message": "Move code item to the data pointer and remove code_item_offset.\n\nThis saves 4 bytes on 32bit and 8 bytes on 64bit on ArtMethod.\n\nAlso update nterp to directly fetch the code item from the data pointer.\n\nTest: test.py\nBug: 112676029\n\nChange-Id: Ic01f43c7ccf2cbce1ec517478e81362232d36371\n"
    },
    {
      "commit": "0c9a217ba6a8af3b3fd522ec75b69c41f216fe49",
      "tree": "f0c0444e60e76f2cbd69a66c3e1214aecf8a1761",
      "parents": [
        "2ea4cc76a1a04ad16edccf5fe2486964f945a125"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Aug 26 14:42:24 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Aug 27 09:31:45 2020 +0000"
      },
      "message": "Always create IMT conflict tables when generating an image.\n\nIt is required by the runtime. Also remove obsolete code around forcing\narray class initialization: we now always intialize in array classes in\nClassLinker::FinishArrayClassSetup.\n\nTest: eng builds\nBug: 166327764\nChange-Id: I2f2398a8ba60360588c089affc4a73897d9df97b\n"
    },
    {
      "commit": "60d4abc813b209c309d00ae2334e6a57e1297b28",
      "tree": "fa6b6b365e12dac727679b36c02216320b403a37",
      "parents": [
        "ab7eccef71be2f88a99e71b240bdd98e34357b7c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 27 13:58:51 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 30 14:17:15 2020 +0000"
      },
      "message": "Reland^2 \"Cover more cases in nterp.\"\n\nThis reverts commit dd5db458831cf74ae5813d2278fbd599145c4522.\n\nBug: 112676029\nBug: 157658616\nBug: 160543640\n\nReason for revert: Fixed missed class initialization.\nTest: wifi tests, run-tests\n\nChange-Id: Ie0a8ae0e92587b5c86203228615534526df640fb\n"
    },
    {
      "commit": "5439f051a950f0281eeafb8e8064839f2aea6e38",
      "tree": "889efef779fa462357f77cb2166c600cb0d60679",
      "parents": [
        "483bf78ae61ab43a3d513cef0de0072e86d0b0b1"
      ],
      "author": {
        "name": "Ulya Trafimovich",
        "email": "skvadrik@google.com",
        "time": "Wed Jul 29 10:03:46 2020 +0100"
      },
      "committer": {
        "name": "Ulyana Trafimovich",
        "email": "skvadrik@google.com",
        "time": "Wed Jul 29 13:58:15 2020 +0000"
      },
      "message": "Revert^3 \"VIXL simulator for ART (Stage1)\"\n\nThis reverts commit e886d68b9c40c941d8966b9c90d0e265c75fb19e.\n\nReason for revert: simulator implemention is not ready yet.\n\nTest: lunch aosp_cf_x86_phone-userdebug \u0026\u0026 m\nTest: art/test.py --run-test --optimizing --host\nChange-Id: I03c8c09ea348205b0238d7a26caef3477cd6ae3b\n"
    },
    {
      "commit": "5880c77e9153b953952507cb924ce3ee8511e084",
      "tree": "059043bb94a1cc008d1e58bfbb1ca34b67517dfd",
      "parents": [
        "d5bcc7288a15cdb823c1226873f72291b281cdbb"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Tue Jul 28 20:12:08 2020 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Jul 29 06:40:25 2020 +0100"
      },
      "message": "Inclusive language updates to class_linker.cc\n\nBased on:\n  https://source.android.com/setup/contribute/respectful-code\n\n#inclusivefixit\n\nBug: 161336379\nBug: 161896447\nTest: art/test.py --host --64 -r\nChange-Id: Ic44dc1929075db26c0b9259fa0db70d2bc581157\n"
    },
    {
      "commit": "346fd964a826cfb5626582452b7519c04aee2f8a",
      "tree": "49fb6cf2ab865391ba4027389b0049474df38c7b",
      "parents": [
        "d3ee902ed06b635eedebc796543a67299eb6cd05"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Mon Jul 27 16:51:00 2020 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Jul 28 11:13:37 2020 +0000"
      },
      "message": "More inclusive language in the runtime\n\nTest: m\nBug: 161896447\nBug: 161850439\nBug: 161336379\nChange-Id: Iabc29fa43b4b5a403699d6bca95e9a2cb8945d77\n"
    },
    {
      "commit": "e886d68b9c40c941d8966b9c90d0e265c75fb19e",
      "tree": "ad78c4e375c95a96e200baa2786e748505ab928b",
      "parents": [
        "f12dd5861e0eaf1822c12137fd353b5e79761a6c"
      ],
      "author": {
        "name": "Ulyana Trafimovich",
        "email": "skvadrik@google.com",
        "time": "Thu Jul 16 15:09:38 2020 +0000"
      },
      "committer": {
        "name": "Ulyana Trafimovich",
        "email": "skvadrik@google.com",
        "time": "Fri Jul 17 11:04:27 2020 +0000"
      },
      "message": "Revert^2 \"VIXL simulator for ART (Stage1)\"\n\nThis reverts commit 3060bb919cd2f37c6a97e87c1581ac5294af72b3.\n\nReason for revert: relanding original change. The fix is setting\n`device_supported: false` for libart(d)-simulator module in the .bp\nfile (`m checkbuild` attempted to build it for arm32 and failed).\nOriginal commit message:\n\nVIXL simulator for ART (Stage1)\n\nQuick User Guide: test/README.simulator.md\n\nThis CL enables running ART run-tests in a simulator on host machine.\nSome benefits of using this simulator approach:\n- No need to use a target device at all.\n  Save developers from solving the device troubles: build, flash, usb,\n  adb, etc.\n- Speed up development/debug/test cycle.\n- Allows easy debugging/testing new instruction features without real\n  hardware.\n- Allows using a smaller AOSP Android manifest master-art.\n\nThe Stage1 CL provides support for running 30% of current run-tests.\nThe rest unsupported test cases are kept in knownfailures.json.\n\nFuture work will be supporting proper stack frame layout between\nsimulator and quick entrypoints, so that stack walk,\nQuickArgumentVisitor, deoptimization, etc can be supported.\n\nThis CL adds libart(d)-simulator-container library to the ART APEX. It\nhas caused the following increase of the APEX size (small, about 0.13%\nfor release APEX, measured for target aosp_arm64-userdebug):\n Before:\n   88992 com.android.art.debug.apex\n   51612 com.android.art.release.apex\n  112352 com.android.art.testing.apex\n After:\n   89124 com.android.art.debug.apex\n   51680 com.android.art.release.apex\n  112468 com.android.art.testing.apex\n\nChange-Id: I461c80aa9c4ce0673eef1c0254d2c539f2b6a8d5\nTest: art/test.py --run-test --optimizing --simulate-arm64\nTest: art/test.py --run-test --optimizing --host\nTest: m test-art-host-gtest\n"
    },
    {
      "commit": "3060bb919cd2f37c6a97e87c1581ac5294af72b3",
      "tree": "6a2b517812ff83cd10cc3b055635d0746157b345",
      "parents": [
        "48ca6a681efe1fa1cf82d8af918bf9bbfd35ae96"
      ],
      "author": {
        "name": "Ulyana Trafimovich",
        "email": "skvadrik@google.com",
        "time": "Thu Jul 16 14:17:11 2020 +0000"
      },
      "committer": {
        "name": "Ulyana Trafimovich",
        "email": "skvadrik@google.com",
        "time": "Thu Jul 16 14:17:11 2020 +0000"
      },
      "message": "Revert \"VIXL simulator for ART (Stage1)\"\n\nThis reverts commit 48ca6a681efe1fa1cf82d8af918bf9bbfd35ae96.\n\nReason for revert: broken build 6685551 on aosp-master on full-eng\nBug: 161440641\n\nChange-Id: I849fe53f56c4786f0f2a1605cbfd215559f11072\n"
    },
    {
      "commit": "48ca6a681efe1fa1cf82d8af918bf9bbfd35ae96",
      "tree": "87ff5251f8f843e64e3f3632c423856ba14ceadf",
      "parents": [
        "cfea667ed9bfbdd21bf9812d1598603fc359d2e1"
      ],
      "author": {
        "name": "Xueliang Zhong",
        "email": "xueliang.zhong@linaro.org",
        "time": "Thu Mar 07 14:48:55 2019 +0000"
      },
      "committer": {
        "name": "Ulyana Trafimovich",
        "email": "skvadrik@google.com",
        "time": "Thu Jul 16 13:31:48 2020 +0000"
      },
      "message": "VIXL simulator for ART (Stage1)\n\nQuick User Guide: test/README.simulator.md\n\nThis CL enables running ART run-tests in a simulator on host machine.\nSome benefits of using this simulator approach:\n- No need to use a target device at all.\n  Save developers from solving the device troubles: build, flash, usb,\n  adb, etc.\n- Speed up development/debug/test cycle.\n- Allows easy debugging/testing new instruction features without real\n  hardware.\n- Allows using a smaller AOSP Android manifest master-art.\n\nThe Stage1 CL provides support for running 30% of current run-tests.\nThe rest unsupported test cases are kept in knownfailures.json.\n\nFuture work will be supporting proper stack frame layout between\nsimulator and quick entrypoints, so that stack walk,\nQuickArgumentVisitor, deoptimization, etc can be supported.\n\nThis CL adds libart(d)-simulator-container library to the ART APEX. It\nhas cause the following increase of the APEX size (small, about 0.13% for\nrelease APEX, measured for target aosp_arm64-userdebug):\n Before:\n   88992 com.android.art.debug.apex\n   51612 com.android.art.release.apex\n  112352 com.android.art.testing.apex\n After:\n   89124 com.android.art.debug.apex\n   51680 com.android.art.release.apex\n  112468 com.android.art.testing.apex\n\nTest: art/test.py --run-test --optimizing --simulate-arm64\nTest: art/test.py --run-test --optimizing --host\nTest: m test-art-host-gtest\n\nChange-Id: I078812dde9aaf7128d9f262b2102251927596b7f\n"
    },
    {
      "commit": "0315efa800072aa324fb967aeb5af51f6421e328",
      "tree": "a74688042819459de47d079dc7c3d9ea5d3307dd",
      "parents": [
        "fda2a4d1cc84a12b5a5cd9f0c27e4fef8c0da0ba"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 26 11:42:39 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 26 16:08:54 2020 +0000"
      },
      "message": "Increment hotness in nterp when doing lookups.\n\nTest: test.py\nTest: google/perf/app-transition/app-transition-to-recents\nBug: 112676029\nBug: 157402634\nChange-Id: Ibe08720b442c5050062db1104be2d3a62641e629\n"
    },
    {
      "commit": "86c8752f64629325026945cd4eabd1dcea224acb",
      "tree": "9dc2be978f9e784a3ce16fa29d46941a94ac1c94",
      "parents": [
        "f97a859e85f703644d897f0e3e1bc54315557aaa"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 11 16:55:55 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jun 19 08:26:46 2020 +0000"
      },
      "message": "Direct calls to @CriticalNative methods.\n\nEmit direct calls from compiled managed code to the native\ncode registered with the method, avoiding the JNI stub.\n\nGolem results:\nart-opt-cc                       x86 x86-64    arm  arm64\nNativeDowncallStaticCritical  +12.5% +62.5% +75.9% +41.7%\nNativeDowncallStaticCritical6 +55.6% +87.5% +72.1% +35.3%\nart-opt                          x86 x86-64    arm  arm64\nNativeDowncallStaticCritical  +28.6% +85.6% +76.4% +38.4%\nNativeDowncallStaticCritical6 +44.6% +44.6% +74.6% +32.2%\n\nTest: Covered by 178-app-image-native-method.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --debuggable --ndebuggable \\\n          --optimizing --jit --jit-on-first-use\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing\nTest: testrunner.py --target --debuggable --ndebuggable \\\n          --optimizing --jit --jit-on-first-use -t 178\nTest: aosp_cf_x86_phone-userdebug boots.\nTest: aosp_cf_x86_phone-userdebug/jitzygote boots.\nBug: 112189621\nChange-Id: I8b37da51e8fe0b7bc513bb81b127fe0416068866\n"
    },
    {
      "commit": "1715efa0b46d57d587237829d1c0695aaca2c344",
      "tree": "61e7013808a8fa9c45384fa8d84bd7f3eb1eaf34",
      "parents": [
        "9922f00cf68aac69209216a0726a45eb6338763c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jun 05 18:34:49 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jun 09 12:28:42 2020 +0000"
      },
      "message": "Add a new class status for verified with access checks.\n\nAt runtime, we won\u0027t run the verifier for those classes, but run with\naccess checks enabled in the interpreter.\n\nBug: 157265232\nTest: test.py\n\nChange-Id: Ia087c3b6f9fcbd295307333e524945d844ef54dc\n"
    },
    {
      "commit": "1c993cd041b3ac6a52dffae11e341759fe71e01f",
      "tree": "777e2766e457b6f149618d117bd7678e0fe53698",
      "parents": [
        "4a88a5af7417d9dc0bfe37cffd92a253531c8f30"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 28 09:30:06 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 29 13:14:25 2020 +0000"
      },
      "message": "Revert^2 \"Throw ClassFormatError for unsupported default methods.\"\n\nThis reverts commit 09261a8c5cd36a8c7a1ae5107da554dd35008b97.\n\nFixed redefine-stress failures. Worked around CTS failures\nby reducing the cases where we throw the ClassFormatError.\n\nTest: 180-native-default-method.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nTest: testrunner.py --host --optimizing --redefine-stress \\\n      --debug --debugggable --cdex-fast\nTest: cts-tradefed run cts --m vm-tests-tf\nBug: 157170505\nBug: 157718952\nChange-Id: I95264af9041836fd6bc54e85263e2a405e877d30\n"
    },
    {
      "commit": "09261a8c5cd36a8c7a1ae5107da554dd35008b97",
      "tree": "93c1dfdb1d13bf4933ccbfbb7f4bcaaa01408242",
      "parents": [
        "03a322dcc15561931ed188f4d69f3ef577e26560"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 27 21:09:27 2020 +0000"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Thu May 28 01:28:37 2020 +0000"
      },
      "message": "Revert \"Throw ClassFormatError for unsupported default methods.\"\n\nThis reverts commit adf0f2e55c285f3fbe0a70c218a8f267029e736c.\n\nBug: 157170505\nBug: 157575227\n\nReason for revert: b/157575227\n\nChange-Id: Ibc0aa5505a59deed717555441a9723b5b6561115\n"
    },
    {
      "commit": "08110ef5de7c734bb3bc03db3d3ae805736aabac",
      "tree": "c15cbc2f59420d213a3ea1391baeaa52e97402f5",
      "parents": [
        "bce6877bca2a47737996eef94e04163b19baba44"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed May 20 19:33:43 2020 +0100"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Wed May 27 15:15:52 2020 +0000"
      },
      "message": "Improve error message in RunRootClinits\n\nUseful for diagnosing current instrumentation and golem issues.\n\nBug: 157459881\nTest: Observe the new message\nChange-Id: I5fa68aba5b4e2319504ed3b3ec70d48f1a87eec5\n"
    },
    {
      "commit": "adf0f2e55c285f3fbe0a70c218a8f267029e736c",
      "tree": "18b773b3cf5ced23fb46dddcf34112424f7a66f2",
      "parents": [
        "50df0c4c892b9afff626605fff36c9e476eb5bfd"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 26 15:47:21 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 27 08:43:33 2020 +0000"
      },
      "message": "Throw ClassFormatError for unsupported default methods.\n\nFix DCHECK() failure for copied native default methods.\nFor dex file version 37+ we reject the dex file.\nFor older versions, throw the ClassFormatError like the RI.\n\nTest: 180-native-default-method.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nBug: 157170505\nChange-Id: I5d2aefdcbf0b807c1cb482d0fda2e77316783cb4\n"
    },
    {
      "commit": "5868adaefe72cc8bcdcd8325c40f712375a506d1",
      "tree": "a1d4328902c4e860fe69c4e4bb34052de2530df3",
      "parents": [
        "5a62af5dc9e9bafeffcac7820e1a5b7586e58477"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 12 11:50:34 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed May 13 08:00:22 2020 +0000"
      },
      "message": "Move implementations from class_root.h to -inl.h .\n\nMake it possible to include the definition of enum ClassRoot\nwithout pulling in a lot of other headers.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nChange-Id: Ic90fdd70bfe0c5428a5c9a0d7901ea7e15b03488\n"
    },
    {
      "commit": "076141924de11466aad8dcd845630605fd1963e1",
      "tree": "19635dcb100295b4f4ede9425e511e52e20d1254",
      "parents": [
        "7cf15213a53f3e9e8e35b4cf0e12c3298fb8ddb6"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Apr 28 17:31:31 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 29 08:27:16 2020 +0000"
      },
      "message": "Handle the situation we could not load the class.\n\nThis happens with the JIT thread through custom class loaders.\n\nTest: test.py\nBug: 73760543\nChange-Id: Ic27a9f8ddd02ba1408963d3cb00ef1ef4da3c063\n"
    },
    {
      "commit": "afa69cd7985a7e438077deffb46b2ac2cf52770d",
      "tree": "6872330bc41b84e1ea7841e893e23f344f1f06f9",
      "parents": [
        "9b78924a29f9eedc8eaf4d3b173d4f0567cb7504"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Apr 21 14:01:44 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 24 10:29:22 2020 +0000"
      },
      "message": "Add another DCHECK that an exception isn\u0027t pending.\n\nThe code assumes there should not be any - it\u0027s unclear if that\u0027s the\ncase, but add a DCHECK to diagnose.\n\nTest: test.py\nBug: 73760543\nChange-Id: If9c89261f1f1dfc4d4966ea89474d8a2ee224452\n"
    },
    {
      "commit": "605c5914b9561c67b4e8b142715410a569f9ca45",
      "tree": "7b7f1a73d19ae4df007f50784e16f8f2b65f4f58",
      "parents": [
        "32b24fdc3466d01f799e0ef39859b103d5c701bc"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 08 15:12:39 2020 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 09 09:13:47 2020 +0000"
      },
      "message": "Add more DCHECKs to investigate build bot failure.\n\nTest: test.py\nChange-Id: I625564895dd701fb04f1ceb3b7bb21ffa273e776\n"
    },
    {
      "commit": "d1f73515701bc64b3a23727b3973da6906f1b167",
      "tree": "59d789c42edd402ae799caa748939b61aeb00be7",
      "parents": [
        "bda163d9c8313f0b92046abda5ffb1216af1e808"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Apr 02 10:50:35 2020 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Apr 03 13:40:14 2020 +0100"
      },
      "message": "dex2oat: add --updatable-bcp-packages-file argument.\n\nAdd a command line argument specifying a file that contains\nthe list of updatable boot class path packages.\n\nTest: Updated module_exclusion_test\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nBug: 151314205\nChange-Id: Ic6a66ad7e565a9b9b344cc467cb1ed550ab41b3f\n"
    },
    {
      "commit": "bc11509d4c3e7f4f28c28f1c07e70e0d2e68add5",
      "tree": "d82985f7ecffca843fd1fb70f44f7355ee94f445",
      "parents": [
        "403384e36986532310a5a600c00dd171b7cee020"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Mar 27 11:25:16 2020 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Mar 27 20:43:45 2020 +0000"
      },
      "message": "Address late comments on go/aog/1269207\n\nAddress a pair of comments on go/aog/1269207. This adds a requested\ncomment clarification and a missing OOM check.\n\nTest: ./test.py --host\nBug: 152339121\nChange-Id: I127dd10db2c01b338171e49ee968ea3593a01c5e\n"
    },
    {
      "commit": "a467a6e81f5c6da589a5fb16fdb85f2604860623",
      "tree": "f40ce22560d4da7457f4d4ffcc9306319030e42d",
      "parents": [
        "e5621f552a1e3e07d2c4a5e29c0d9494b09bbffe"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Mar 23 16:07:29 2020 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Fri Mar 27 17:48:38 2020 +0000"
      },
      "message": "Fix incorrect interface-override linking\n\nWe would incorrectly search all declared methods when searching for\noverrides of super-class interface methods. This could lead to\nincorrect behavior since we could try to override methods with static\nor private methods. This could cause exceptions or other issues.\n\nThis fixes a typo from over 4 years ago in go/aog/185608 and restores\nthe behavior we had prior to N.\n\nBug: 152199517\nTest: ./test.py --host\nChange-Id: Ic6ce51f79d071727316bb39e5bbeabb92cb4aa9a\n"
    },
    {
      "commit": "e4abf13cf6b7cbc50e4e22d7b9fc6f31d0bb0ac3",
      "tree": "9c10bc444d55b777b6aed88588412318e280cd60",
      "parents": [
        "16c08ca97486f535698f1a1b17f0332bfe78e95a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 24 17:12:29 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 27 10:20:55 2020 +0000"
      },
      "message": "ART: Update list of reserved boot class path packages.\n\n(cherry picked from commit 1ade9f4749a052b469aba444fb023452474e33c3)\n\nTest: aosp_taimen-userdebug boots.\nTest: oatdump --instruction-set\u003darm64 \\\n      --oat-file\u003d$ANDROID_PRODUCT_OUT/system/framework/oat/arm64/services.odex \\\n      --dex-file\u003d$ANDROID_PRODUCT_OUT/system/framework/services.jar | \\\n      grep -E \u0027Landroid/net/.*\\(OatClass.*Compiled\\)$\u0027 | \\\n      grep -vE \u0027\\(NotReady\\)\u0027  # Filter out unresolved classes\n      # Empty output. (Many classes without the last grep.)\nBug: 151314205\nMerged-In: I633fe53a3bc2e5ed93e523428d7dec18363971cf\nChange-Id: Ib6c48bb3c729d5d6eae40fd680ca7c392ae89cc7\n"
    },
    {
      "commit": "133987d8e3387395943f33ecc467ba0dbfed77e6",
      "tree": "630e3ced9837304eed5c4a6b53c322b576f82286",
      "parents": [
        "e2cc08b179e665afced11ae8deb3508f0d3814ca"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Mar 26 19:22:12 2020 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Mar 26 23:35:17 2020 +0000"
      },
      "message": "Revert^2 \"Don\u0027t include static or private methods with proxy construction.\"\n\nThis reverts commit 379503d0a12d4e22f0c04b4e7f295bfb9f6349fd.\n\njava.lang.reflect.Proxy classes are meant to only proxy the interface\nmethods of the classes they are proxying. Instead we were creating\n(invalid) class objects that contained any static or private methods\nthe interfaces had in the proxies vtable. This can break assumptions\nabout the layout of classes elsewhere in the runtime.\n\nManually filter out any static/private methods and their throws any of\nthe interfaces contain and not pass them down into the proxy class\ninternals.\n\nReason for revert: Fixed issue where throws array was not filtered\nBug: 152479334\nBug: 152339121\nTest: ./test.py --host\nTest: atest com.android.server.wifi.WifiServiceImplTest#registerSoftApCallbackFailureOnLinkToDeath\n\nChange-Id: I5157529afc733a8422e15e4b74d501c29646cc62\n"
    },
    {
      "commit": "379503d0a12d4e22f0c04b4e7f295bfb9f6349fd",
      "tree": "bcf84338c2d9be451fabbbe6c3112f9fac62032d",
      "parents": [
        "0c0f3026ba429177cfb348256d74f3cf00a39c41"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Mar 26 19:13:29 2020 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Mar 26 19:20:30 2020 +0000"
      },
      "message": "Revert \"Don\u0027t include static or private methods with proxy construction.\"\n\nThis reverts commit 584e5996608a263feb8fd4241b78a83501a46868.\n\nReason for revert: Failed to filter out throws array.\nBug: 152479334\nBug: 152339121\nTest: None, pure revert\n\nChange-Id: I7dfe8ee241905f5dbd863d3e39c731a05fa3a6cb\n"
    },
    {
      "commit": "f368882656cce265d732cba237fac7bc312934a6",
      "tree": "157fc1c36079d64f065d2a46d955f3d96ba5e352",
      "parents": [
        "aacb4b84078eacbee31f168676750ca73514217e"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 25 15:04:03 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Mar 26 14:20:58 2020 +0000"
      },
      "message": "Add more debugging info around ResolveField.\n\nTo better diagnose the DCHECK that we have hit here:\nhttps://android-build.googleplex.com/builds/git_master-art-host-linux-art-jit/6325844/logs/build.log\n\nTest: test.py\nChange-Id: If160b74055c27cd02bde27e29c7e7f731c458f4d\n"
    },
    {
      "commit": "584e5996608a263feb8fd4241b78a83501a46868",
      "tree": "006b0962f2e7a32985192e44399f0909d228831f",
      "parents": [
        "c1ad13a45ca363f7b5044d66a48853403a993b33"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Mar 25 10:10:34 2020 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Mar 25 22:48:43 2020 +0000"
      },
      "message": "Don\u0027t include static or private methods with proxy construction.\n\njava.lang.reflect.Proxy classes are meant to only proxy the interface\nmethods of the classes they are proxying. Instead we were creating\n(invalid) class objects that contained any static or private methods\nthe interfaces had in the proxies vtable. This can break assumptions\nabout the layout of classes elsewhere in the runtime.\n\nManually filter out any static/private methods any of the interfaces\ncontain and not pass them down into the proxy class internals.\n\nBug: 152339121\nTest: ./art/test.py --host\nChange-Id: I11b86d50575262b47e9ce9626705cd7a9e2ccfc7\n"
    },
    {
      "commit": "b68bb7a02ea795fa4defb18b3f9ce31879d66271",
      "tree": "2aa9d13f36a5ae1625f520c397fae62fbcb155e6",
      "parents": [
        "dc9d6a0740982a6b1eab5f3c580d8825cc9ced9c"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 17 10:55:25 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 18 09:59:29 2020 +0000"
      },
      "message": "Fix compiling boot image extension with assume-verified.\n\nThe change https://android-review.googlesource.com/1246288\nenabled AOT initialization of classes for the compiler\nfilter \"assume-verified\". However, this was untested and\nbroken because aborted transactions would leave created\narray classes with partially rolled-back state on the heap.\nNote that for other compiler filters, the verification step\ncreates those array classes outside of a transaction.\n\nWe fix this problem by making sure that the initialization\nof an array class does not create any transaction records\nfor the class fields (we are keeping the defined class).\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nTest: adb root \u0026\u0026 \\\n      adb shell stop \u0026\u0026 \\\n      adb shell setprop dalvik.vm.boot-image \\\n          \u0027boot.art:/nonx/boot-framework.art!/system/etc/boot-image.prof\u0027 \u0026\u0026 \\\n      adb shell setprop dalvik.vm.image-dex2oat-filter \\\n          assume-verified \u0026\u0026 \\\n      adb shell start  # Starts correctly.\nTest: Extract the boot image extension compilation command\n      from the verbose log, change compiler filter to\n      \"assume-verified\" and execute with no crashes.\nBug: 119800099\nChange-Id: Id57a01af0a015c75a16eea12fd19599ae76ce49a\n"
    },
    {
      "commit": "23369542f187d97544a27ee31b9ee5cad2146c32",
      "tree": "0fa074dbf7594103012ff4a778cd9d5f8e0653c8",
      "parents": [
        "9bdba6e5e252de50c5cdd7f1680b84d87c903115"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Mar 04 08:24:11 2020 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Mar 05 14:57:29 2020 +0000"
      },
      "message": "Avoid NanoTime in InitializeClass unless stats are enabled\n\nSaves ~0.6% cycles during app startup.\n\nBug: 150720953\nTest: make\nChange-Id: Ia4ca3743582440db0c1e311792c54474dba9b07e\n"
    },
    {
      "commit": "8a1a0f719e42746840f88aad079711e9d951b797",
      "tree": "2a3b3e1bc30a0b15b679f141a6d17380eded4867",
      "parents": [
        "23f3d80e307bbacfadd2160f0d5b44731e11c6e4"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@fb.com",
        "time": "Tue Mar 03 16:07:45 2020 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Mar 04 21:14:58 2020 +0000"
      },
      "message": "ART: Ensure dex caches keep classloader live\n\nLive dex caches must keep their associated classloader live. Otherwise\nthe classloader may get unloaded, attempting to free DexFiles which\ncannot be unregistered.\n\nTest: art/test/testrunner/testrunner.py -b --host\nTest: m test-art-host-gtest\nChange-Id: I0eed5b3b46ed681c739d6923a57d0878afbba1a7\n"
    },
    {
      "commit": "de7f878d640003402a0b3a921fa3bf978377bf26",
      "tree": "518ca65ac4508ae0a38c824b2dd5c6ca57e1b315",
      "parents": [
        "ffd067c6e248a602f244c8536fce8177566858bb"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Feb 24 10:14:22 2020 -0800"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Feb 24 18:16:02 2020 +0000"
      },
      "message": "Fix minor code-style error\n\nA line was too long and some arguments were misaligned.\n\nTest: None\nChange-Id: I2c35698a88baca35bba4c23b1ade2272c776d56d\n"
    },
    {
      "commit": "725da8fb9665abfb9c9c6aaca147120e46381b2d",
      "tree": "3d9540b88534e6ef8f049cd0935bb8f644362cde",
      "parents": [
        "e3de71cbb21332904316c37f00682e2f03e04783"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Feb 19 14:46:33 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Feb 22 02:35:07 2020 +0000"
      },
      "message": "Fix race between dex-file registration and class-loader deletion\n\nWe keep track of class-loaders by having a list with jweak references\nto the dex-caches. When we register a new dex-file we check that the\ndex-cache hasn\u0027t already been registered with a different\nclass-loader. We decoded the jweak and performed this check this\nwithout any locks however meaning we could race with class-loader\ncleanup. This could cause CHECK failures as we try to decode a deleted\njweak.\n\nBug: 147206162\nTest: ./art/test/run-test --create-runner   --host --prebuild --compact-dex-level fast --optimizing --no-relocate --runtime-option -Xcheck:jni  2001-virtual-structural-multithread\n      ./art/tools/parallel_run.py\nChange-Id: Ibeb12ec3d42f7972d09b155b7c24743266897a54\n"
    },
    {
      "commit": "fa458ac21af98b3bdde2c62ed86b9c192b994372",
      "tree": "5fa7543c9fd5edd0e950b19a70412002e10bba47",
      "parents": [
        "99d91d18f9f73427eced2f22642520d50c3c3b83"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 12 14:08:07 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 19 16:08:34 2020 +0000"
      },
      "message": "Allow late lookup for @CriticalNative methods.\n\nTest: Add and enable tests in 178-app-image-native-method\nTest: Add and enable tests in jni_compiler_test\nTest: Manually step through the new stub in GDB and check\n      that backtrace works at various points.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing\nBug: 112189621\nChange-Id: If094e5062acbb99eefa88f2afb4815f93730cb82\n"
    },
    {
      "commit": "18dc023800c1c3f751bb5a11208d176a6d9a7c78",
      "tree": "1acde77854f4bd510970167bae4570f65b5a1df3",
      "parents": [
        "8c8f148bdde5eeb799dd802d861149b3e0f538c5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 10 14:29:45 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Feb 10 16:40:02 2020 +0000"
      },
      "message": "Remove obsolete CHECKs for image dex file location.\n\nThese checks are not valid for --single-image extensions or\nfor extensions after boot class path components without\ncorresponding images. Instead of updating these checks,\nrely on the checks done by the ImageSpace::LoadBootImage().\n\nTest: aosp_taimen-userdebug boots when built with\n      `DEXPREOPT_USE_ART_IMAGE\u003dtrue`. Then\n      adb root \u0026\u0026 \\\n      adb shell setprop persist.sys.dalvik.vm.lib.2 libartd.so \u0026\u0026 \\\n      adb reboot  # Starts correctly.\nTest: adb root \u0026\u0026 \\\n      adb shell stop \u0026\u0026 \\\n      adb shell setprop dalvik.vm.boot-image \\\n          \u0027boot.art:/nonx/boot-framework.art!/system/etc/boot-image.prof\u0027 \u0026\u0026\n      adb shell start  # Starts correctly; no tombstones.\nBug: 119800099\nChange-Id: Id6615a8ac6b423c5f0784f3c0f621bcc016073b7\n"
    },
    {
      "commit": "4cbb51a0c057249a500ca7fe3947401978f165d2",
      "tree": "af626569243ce560c45fe5c653ca61fae0cd6a0b",
      "parents": [
        "5d24c3d43152b36181fbf9819bfbe5589572f16b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Feb 07 11:25:54 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Feb 07 18:21:11 2020 +0000"
      },
      "message": "Fix ART code around JIT zygote.\n\n- The right image location for it now ends with a profile\n- Add profile locations to image spaces, so the JIT knows what to\n  compile\n- Remove now deprecated ApexImage related code.\n\nBug:119800099\nTest: boots, methods from framework gets compiled by zygote\nChange-Id: Ie31b62d0a25f1b50e266c1537c43307d7b29e138\n"
    },
    {
      "commit": "8c41a0b9bcf6ab95d92bed4976ee15f2c54e2d74",
      "tree": "d9b45049d12fbe4dcc29576bbc625c667d233edb",
      "parents": [
        "99c19ca707391f0908313c7cee2ef315d2b5cb3c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Feb 06 16:52:11 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Feb 07 09:39:46 2020 +0000"
      },
      "message": "Handle interpreter / access-checks mode in the runtime.\n\nStop requiring multiple image kinds for run tests, and have the runtime\nadjust method flags and entrypoints when it is running interpreter-only\nor with soft fail verification.\n\nTest: test.py\nChange-Id: I813fe17e49d2b07545577ecf4ce7b6af62e3bef9\n"
    },
    {
      "commit": "fc58809f7b932d86234130be15487017dc37b0cf",
      "tree": "d003dedec73d77473aff6b2039860bc76a69d898",
      "parents": [
        "d00f129f1b7148f01efe6e9283a72d6ec8f0edd3"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Jan 23 15:39:08 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jan 29 23:31:10 2020 +0000"
      },
      "message": "Remove old JDWP implementation from ART\n\nThe old \u0027internal\u0027 JDWP implementation hasn\u0027t been used for a few\nreleases and it\u0027s a lot of code that\u0027s barely being tested and is at\nrisk of bit-rot. To simplify the runtime and remove potentially buggy\ncode this removes it.\n\nWe also needed to rewrite the DdmThreadNotification code since it\nrelied on the suspension functionality from the old debugger and was\ngenerally unsafe.\n\nTest: ./test.py --host\nTest: atest --test-mapping cts/tests/jdwp/TEST_MAPPING\nTest: atest --test-mapping cts/hostsidetests/jdwptunnel/TEST_MAPPING\nTest: Manual ddms\n\nBug: 119034743\n\nChange-Id: I775f310a009141296b730e4a6c2503506a329481\n"
    },
    {
      "commit": "7e2c963b572dff7aded82d5524b5ece81f7e0210",
      "tree": "9e04ff456950cde421ae71d37ac0dbd9e6f79c5b",
      "parents": [
        "73ffa57c7fbeaa131ba34777aa1622ee1896eb01"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jan 09 13:41:10 2020 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jan 27 17:17:58 2020 +0000"
      },
      "message": "Update interpreter entrypoints in an image to nterp when supported.\n\nAlso put the resolution stub instead of the interpreter entrypoint\nwhen a class is not initialized, to ensure nterp gets executed after\nthe resolution stub.\n\nTest: test.py\nBug: 112676029\nChange-Id: I27b4a3647eea22f44b9cccce41284ebf7166b313\n"
    },
    {
      "commit": "ed1cecd996067d2cad66b297bd856de169a5fdbe",
      "tree": "ffdc40e304ea84a0279e4e3d92697b229be59bee",
      "parents": [
        "6ef7713cf58629f8c5edce8554a1b60fbfdd1de2"
      ],
      "author": {
        "name": "Dan Zimmerman",
        "email": "danzimm@fb.com",
        "time": "Thu Jan 16 10:40:05 2020 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jan 21 16:37:00 2020 +0000"
      },
      "message": "Clean up dead code \u0026 outdated comment in app image validation\n\nAfter I8f2a1ab1baa8f09e7a7d4913ff790927eb66cddf there was a stale\ncomment left around and code left around to extract the runtime\nClassLoader\u0027s dex file names.\n\nTest: test/testrunner/testrunner.py -b --host\nChange-Id: I8194f1188d23b59c90d0a10fbc14e53225ebce6a\n"
    },
    {
      "commit": "6ef7713cf58629f8c5edce8554a1b60fbfdd1de2",
      "tree": "4c17a77fffa9bef0322de5f5c770daef01b0e49a",
      "parents": [
        "21c5b6a410c567ccbb7e8ea066f1c4ba954f01a2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jan 21 13:52:11 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jan 21 14:17:48 2020 +0000"
      },
      "message": "Remove dead code related to profile collection.\n\nThis code had been dead since\n    https://android-review.googlesource.com/411660 .\n\nTest: m\nChange-Id: I17440d80971bb14ec062ed8b982b9cdd70383efb\n"
    },
    {
      "commit": "a72256b2b9cb32ead8bdf06c7d6546eb01ef4229",
      "tree": "3060f8b142aba9345df87968142732ad7ea8255a",
      "parents": [
        "1c3c106fc896453e6e9b8dd5914eddf5b20d2416"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Tue Jan 14 13:52:37 2020 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jan 16 17:15:04 2020 +0000"
      },
      "message": "Remove app image dex file and class loader checks\n\nThese checks are already covered by the class loader context.\n\nTest: test-art-host\nChange-Id: I8f2a1ab1baa8f09e7a7d4913ff790927eb66cddf\n"
    },
    {
      "commit": "00391824f4ee89f9fbed178a1ee32bc29fa77b3b",
      "tree": "aea6bc5e49801c5b4816257ab16a97181ef0d911",
      "parents": [
        "001e5b33ba7065dde0b85450830b605733ae1685"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 10 10:17:23 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Dec 18 06:50:39 2019 +0000"
      },
      "message": "Add an implementation of Nterp for x64.\n\nAnd enable it on x64 when runtime and ArtMethod requirements are met\n(see nterp.cc).\n\nTest: test.py\nBug: 112676029\nChange-Id: I772cd20a20fdc0ff99529df7495801d773091584\n"
    },
    {
      "commit": "270db1ce48377e3d9ca0c3dcec834ac807ca885b",
      "tree": "ffc553c6ff1ad37bdc3caca01ad686fa41ca0688",
      "parents": [
        "42b9c19772542457701d5efea26aae4449dec8c7"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Dec 03 12:20:01 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Dec 11 18:46:44 2019 +0000"
      },
      "message": "Revert^4 \"Allow structural redefinition on non-final classes.\"\n\nThis reverts commit 664999a12d6fc8a8ef5c0519b12ec1e8a51bb085.\n\nFixed issues with GC and quickened instructions in parent CLs.\n\nReason for revert: Fixed issues with GC CHECK fail and device SEGVs.\n\nTest: ./test.py --host\nTest: ./test.py --target\nBug: 134162467\nBug: 144168550\nChange-Id: Ibacddaf45beb72184f97d53d5d048bd442578658\n"
    },
    {
      "commit": "664999a12d6fc8a8ef5c0519b12ec1e8a51bb085",
      "tree": "f4ae1b0844ac075807229db9695ead7dec07ff8a",
      "parents": [
        "642af13b1b14794d8ab0db5cc82206213e648fa1"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 03 08:47:26 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Dec 03 08:47:45 2019 +0000"
      },
      "message": "Revert \"Revert^2 \"Allow structural redefinition on non-final classes.\"\"\n\nThis reverts commit f1b809ce611e943f926fff97cefe0930226ffcc2.\n\nReason for revert: Tests still fail\n\nBug: 134162467\nBug: 144168550\nChange-Id: Icdebc826b8630920b716afbfd6f338a29669fcc2\n"
    },
    {
      "commit": "0a19e212e56fc6fe2809b58072ddcf4acfdc568d",
      "tree": "6e5ef4a1bd1d08917ada2a49d5f807cfbc9a4e1a",
      "parents": [
        "42c52f53b3c85b5e3c984bca8eaec2e03893dd2e"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Wed Nov 27 14:35:24 2019 -0800"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Dec 02 18:56:46 2019 +0000"
      },
      "message": "Add null check in AppendToBootClassPath\n\nAim to diagnose test 1002 that crashed once due to having a null\nelement in ClassLinker::boot_class_path_.\n\nBug: 144895912\nTest: test/testrunner/test.py --host -j32\n\nChange-Id: Ibc072dbc1bd48cfde0ad5d3b56ebdc348d441085\n"
    },
    {
      "commit": "f1b809ce611e943f926fff97cefe0930226ffcc2",
      "tree": "f75675383cf8018f9f333e608df35edbacf1c913",
      "parents": [
        "20b7a9b8aeaf76fc8f3248f211489fd00af73170"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 26 18:52:06 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 02 18:34:20 2019 +0000"
      },
      "message": "Revert^2 \"Allow structural redefinition on non-final classes.\"\n\nWe were incorrectly racing with the rest of the runtime in a couple of\nplaces. First we would return an ObjPtr of a newly defined class after\nholding it over a suspend point. This could lead to DefineClass\nreturning an obsolete class in some cases.\n\nWe also failed to ensure the class-status was synchronized between the\nold and new classes during structural redefinition. This could lead to\na class appearing to go backwards in status.\n\nThis reverts commit 88b1c83080afcb2bfb6f781ded1c90fe8f9eab4d.\n\nReason for revert: Fixed issues causing test failures.\n\nTest: ./test.py --host\nBug: 134162467\nBug: 144168550\n\nChange-Id: I4d0f7718490532f0ef14a9561b8e7000ef292b12\n"
    },
    {
      "commit": "7dac864d7eae3d731eeacf55cfc7f71b4df6cee3",
      "tree": "9f27bb1c0b6f076c2dd1b721441200f9f7a78022",
      "parents": [
        "047081a1509762879a9eb51981982af65f419bac"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 06 17:09:30 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 27 10:02:22 2019 +0000"
      },
      "message": "Clean up JNI dlsym lookup trampoline.\n\nMake sure the GenericJniTrampoline recognizes the trampoline\nin primary boot image oat file. Rename that trampoline, add\na test and flag some issues in the code.\n\nTest: New test 178-app-image-native-method.\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: testrunner.py --host -t 178-app-image-native-method\nBug: 112189621\nChange-Id: I8f8cd11998af536fd3842dd4183a25f0367655a6\n"
    },
    {
      "commit": "88b1c83080afcb2bfb6f781ded1c90fe8f9eab4d",
      "tree": "e3ee63ccca83c60c5790e51610349889f44daacf",
      "parents": [
        "8e895008a3e2f2813bb46cb0c6bc76884e46e9ac"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Nov 26 14:13:44 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Nov 26 15:55:26 2019 +0000"
      },
      "message": "Revert \"Allow structural redefinition on non-final classes.\"\n\nThis reverts commit c47040d31cbcd8cddd5fadb552b4f0f6c94b5bd0.\n\nReason for revert: Breaks ART tests (see e.g. b/145197371).\n\nBug: 145197371\nBug: 134162467\nBug: 144168550\nChange-Id: Ia8e5788655057e380fc723a38900d26d69cda938\n"
    },
    {
      "commit": "c47040d31cbcd8cddd5fadb552b4f0f6c94b5bd0",
      "tree": "50df569420cd6746daadf1487933719d1f86d66b",
      "parents": [
        "dc540dfffb6863177143d024dd6f491775d77585"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 13 09:33:52 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Nov 26 02:11:19 2019 +0000"
      },
      "message": "Allow structural redefinition on non-final classes.\n\nThis adds support for structurally redefining non-final,\nnon-finalizable classes. The only restriction is that one cannot\nredefine a class at the same time as any of its supertypes, if a\nstructural redefinition is occurring. The structural redefinition may\nnot remove any fields or methods, change the superclass or change the\nimplemented interfaces. Adding new methods or fields, both static or\nnon-static, public, private, protected, or package-private, is\nsupported.\n\nTest: ./test.py --host\nBug: 134162467\nBug: 144168550\nChange-Id: I32e9e854b3e56270170b10e8f5aba9de8f6bfdfa\n"
    },
    {
      "commit": "a879bdf5e9e1f2e1ff01ce9a66af3682188079bf",
      "tree": "0621e683ad6710e590a26fd7ae399bb077edc7de",
      "parents": [
        "142816a6ac2a9261d37cffb7a7367a96f712fde2"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 19 16:25:47 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 20 09:43:45 2019 +0000"
      },
      "message": "Revert^2 \"Fix CompilerDriver\u0027s handling of boot image extension.\"\n\nThis reverts commit 96d8585ebb9e21fc27a59ddd4173ca62ad93c194.\n\nFixed verification from oat files when compiling a boot\nimage extension. Normal verification can fail if the\nprimary boot image is quickened.\n\nTest: `art/tools/buildbot-build.sh --target` with master-art manifest\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 119800099\nBug: 144751090\nChange-Id: Ibc4e7ab1ec8451c9b5c87b6e87ab9807ac22e284\n"
    },
    {
      "commit": "a9bbc08daad6d601c870c8493323f57b70373336",
      "tree": "8ca74373cac0fe52aced5f32cc6f6e1f9c3239b5",
      "parents": [
        "56f1332113c3b8b1844c04683b9cb9dc5a0bd346"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Thu Nov 14 14:51:41 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Nov 15 19:17:23 2019 +0000"
      },
      "message": "Implement STL iterators on ObjectArray and add helpers\n\nIterating over an ObjectArray is rather cumbersome, requiring manual\nfor-loops. To improve ergonomics and STL standard-ness this implements\nstd::iterator\u0027s for ObjectArray and converts code to use this (in\nsimple situations). This should allow us to use standard STL functions\nin the future when dealing with ObjectArrays.\n\nAlso adds some helpers such as ZipCount and ZipLeft.\n\nTest: ./test.py --host\nChange-Id: Ifd515b8321775424b3256a6faf47b2ba970177d3\n"
    },
    {
      "commit": "889b72d80e192a2e30698f9966a4a7171a1c1df8",
      "tree": "d325bfb4ff44ffaf49650f32a2cfafbaa9f43603",
      "parents": [
        "afaa457b6f56c6d3bff9dce9b314825f4726fdf9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Nov 12 11:01:13 2019 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Nov 15 10:34:24 2019 +0000"
      },
      "message": "Load classes for boot image extension.\n\nPreviously we actually failed to load and initialize classes\nfor boot image extensions. Though some classes may have been\nresolved by other code paths, extension art files did not\ncontain the intended classes. This CL fixes that and some\nother bugs that were exposed by this class initialization.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I63a1970f7ff45dc37b14ebd24c5a68f3edacd6ef\n"
    },
    {
      "commit": "f05f04b429a63eb036f501866a863109f05b95b2",
      "tree": "e6abb50536cb04ed60cf134b2e9556366e5a2064",
      "parents": [
        "5859799ce6ad57ee862434603fc29cecfec1d775"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 31 11:50:41 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Oct 31 14:52:45 2019 +0000"
      },
      "message": "Make ArtMethod methods const or requiring the mutator lock.\n\nHelps the jitzygote optimization on sharing the boot image methods\npost fork.\n\nThe CL shows that the code base already almost fully handles requiring\nthe mutator lock when mutating ArtMethod data.\n\nBug: 119800099\nTest: builds\nChange-Id: If4a938b66aac85304ec0a27c53bb9fa951191d8c\n"
    },
    {
      "commit": "5115a4dffb95637efe1df92d6f6eb70a8724c9ae",
      "tree": "605f5ca51dde13b1ec93fb0348d52969367b126e",
      "parents": [
        "15ffafd026962a16ee1abdea630542dc46f67482"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 17 14:56:47 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Oct 18 12:49:45 2019 +0000"
      },
      "message": "Clean up initialization checks for entrypoints.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: aosp_taimen-userdebug boots.\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing --jit\nBug: 18161648\nChange-Id: Ia3c2fdb616a5bb289e5afeccd4e6fe3eaf7ed697\n"
    },
    {
      "commit": "cce414f8b46de709250af49398083e99f96b6161",
      "tree": "b212a1a4aa7fbd47728785bf9e979b6ffb60fde4",
      "parents": [
        "0866ea41c21df6672b302eabe5b98ebb40c92613"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 07 08:51:33 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 16 15:29:16 2019 +0000"
      },
      "message": "Delay entrypoint update until visibly initialized.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --jit\nTest: aosp_taimen-userdebug boots.\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing --jit\nBug: 18161648\nChange-Id: Idde0cbc848f19236319426bc82ac10b8b8bb9ee9\n"
    },
    {
      "commit": "5ee206f3ee081424b323844a4fc91c3d0e89aa89",
      "tree": "c6b3aefcace815a5d4389b94c73ff3706d4179bd",
      "parents": [
        "caf8f4c5aaa1c2827d13309bd59b9f4b7e3424b9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Oct 08 15:09:17 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Oct 09 08:36:57 2019 +0000"
      },
      "message": "Make LinkMethods setup the entrypoint like image_writer.\n\nFor consistency, set the entrypoint the same.\n\nTest: test.py\nChange-Id: Ie069c6e5214d5e00ddcc072dbe6db423d0d7c80e\n"
    },
    {
      "commit": "5a0b6726562948421fbbeb38d20ffd66ef688ff8",
      "tree": "9507db95b78ba55228fc24dc43f485a9755b9773",
      "parents": [
        "a6c9b78a3f2c7a7f39761427dcd32e0bf6c546f3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Sep 24 15:09:40 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 25 16:02:56 2019 +0000"
      },
      "message": "Boot image: only use the resolution stub when there is AOT code.\n\nThis avoids dirtying the page when the class becomes initialized.\n\nTest: test.py\nBug: 119800099\nChange-Id: I5cd7ae56b6637583179dbb766da251977b7ac961\n"
    },
    {
      "commit": "fb11957a861bc2230773e74e969b45a92d4f587b",
      "tree": "9606da919e810fbb2f11633c93b6d43dc27700bb",
      "parents": [
        "c2c5948696ca128d862bf837472aacd4c28ce551"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Sep 18 15:04:53 2019 -0700"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Sep 18 22:15:02 2019 +0000"
      },
      "message": "Fixed issue in structural redefinition around class init\n\nOn non-x86 ISAs class initialization is two stage with a class first\nbeing \u0027kInitialized\u0027 and later being \u0027kVisiblyInitialized\u0027. This has\nto do with the memory model of non-x86 ISAs. Because we did not follow\nthis process correctly we could hit check-failures on non-x86 targets\nif the redefined class was not fully initialized when being redefined.\n\nTo fix this we force the class-linker to bring the initialization\nstate of the newly created class all the way to visibly initialized\nbefore allowing the redefinition to take place.\n\nTest: ./test.py --target\nBug: 134162467\nBug: 141236848\nChange-Id: I466861270b957a0fe6a90bda0bdabece950f99b2\n"
    },
    {
      "commit": "4ac0e1571e015a01d75091c3daef065f9624ad77",
      "tree": "4d13edeab88bd6fd724388c48385b0c3cca4f3a8",
      "parents": [
        "5a2301d897294ff4ee6de71f459dc2566dc3fa1a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 18 06:14:50 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 18 06:14:50 2019 +0000"
      },
      "message": "Revert \"Revert \"Basic structural redefinition support\"\"\n\nThis reverts commit 5a2301d897294ff4ee6de71f459dc2566dc3fa1a.\n\nBug: 134162467\n\nReason for revert: Relanding as unclear if issue is due to topic.\n\nChange-Id: Ib1d1cf2e9132e30c9649b760ae9ae2d8ceacf843\n"
    },
    {
      "commit": "5a2301d897294ff4ee6de71f459dc2566dc3fa1a",
      "tree": "2bd06ab3f463734994b3d251f6115514520dbb3f",
      "parents": [
        "4eb6eb40e88214fcc874d93e75660cb580cb4d58"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 18 06:11:22 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 18 06:12:13 2019 +0000"
      },
      "message": "Revert \"Basic structural redefinition support\"\n\nThis reverts commit c971eafeff43e4e26959a6e86b62ab0a8f1a6e1c.\n\nBug: 134162467\n\nReason for revert: Breaks on redefine-stress\n\nChange-Id: I4e38da23d65b5b34b26b5ab537a3583328e078a4\n"
    },
    {
      "commit": "c971eafeff43e4e26959a6e86b62ab0a8f1a6e1c",
      "tree": "f8647487e7465712fd73118ceb89e13167a12648",
      "parents": [
        "1ba7e8c10af4e270864a417044244d63db53ccf5"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Aug 13 10:50:38 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Sep 17 23:52:12 2019 +0000"
      },
      "message": "Basic structural redefinition support\n\nThis adds basic support for adding methods and fields to already\nloaded classes using redefinition. This \u0027structural class\nredefinition\u0027 is currently limited to classes without any virtual\nmethods or instance fields. One cannot currently structurally redefine\nmultiple classes at once nor will structural redefinition trigger the\nstandard redefinition events.\n\nAfter structural redefinition all references to the old class, and its\nfields and methods are atomically updated. Any memory associated with\nthe static fields of the old class is zeroed. Offsets for field access\nmight change.  If there are any active stack frames for methods from\nthe redefined class the original (obsolete method) code will continue\nto execute. The identity hash code of the redefined class will not\nchange. Any locks being held, waited or blocked on by the old class\nwill be transferred to the new class.\n\nTo use this feature the process must be debuggable and running with\n-Xopaque-jni-ids:true.\n\nFor device testing use a wrap.sh that adds the following flags:\n\n    \u0027-Xopaque-jni-ids:true -Xcompiler-option --debuggable -XjdwpProvider:adbconnection\u0027\n\nStructural redefinition only available using the\n\"com.android.art.UNSAFE.class.structurally_redefine_class_direct\"\nextension. This will not trigger the normal class-redefinition events.\nOnly one class may be redefined at a time.\n\nNB There are still some holes in this potentially allowing obsolete\nmethods/fields to be visible. Most notably during jni-id, MethodHandle\nand VarHandle creation as well as potentially other places in the\nruntime. These holes will be closed by later CLs. Until then the\nextension to access structural class redefinition will remain tagged\nas UNSAFE.\n\nTest: ./test.py --host --all-compiler\nBug: 134162467\n\nChange-Id: I825d3a4bdb9594c0147223ae69f433ce9bbfc307\n"
    },
    {
      "commit": "422a9ebc5b9d780a3201243f02b58652b44d9896",
      "tree": "4fcd6abe72d70358d7bf6235266ab685b61678a1",
      "parents": [
        "9f18fbc433bba51a5b81249989a8726558135528"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Aug 01 12:54:07 2019 +0100"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Aug 01 16:54:29 2019 +0000"
      },
      "message": "Do not hold lock when making class visibly initialized.\n\nDoing so can lead to deadlocks.\n\nBug: 138561860\nBug: 36692143\nTest: New test 177-visibly-initialized-deadlock\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing\nChange-Id: I6195a4a5a7d865f90c529da684697b9a3e23ff30\n"
    },
    {
      "commit": "9f18fbc433bba51a5b81249989a8726558135528",
      "tree": "5a293f961924edf35f6ad4be9935a71c5ba69761",
      "parents": [
        "6f382013399fc8ba8b2717e4d24d91978d2bc0f7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jul 31 15:06:12 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Aug 01 16:36:41 2019 +0000"
      },
      "message": "Make classes visibly initialized faster.\n\nReduce the batch size from 32 to 16 and the trigger count\nfrom 1024 to 128.\n\nThis may help system health micro-benchmarks (b/138601570)\nbut I\u0027m unable to run the forrest tests locally to verify.\n\nBug: 138601570\nBug: 36692143\nTest: m\nChange-Id: I4d938ddbd284ebe624d146eca9ad59ceefeba4d4\n"
    },
    {
      "commit": "8e1106587f0273116302afe06956129b5d82784a",
      "tree": "e1869e8da9ab9a6bfdf89a34f4e8cedd44045005",
      "parents": [
        "5a11036542fbd2c00de1896c0ae2477f655e8ed3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 30 10:14:41 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Aug 01 08:35:08 2019 +0000"
      },
      "message": "Use ClassStatus::kVisiblyInitialized for allocations.\n\nAnd move the \"intialized but not visibly initialized\" check\nto ClassLinker::EnsureIntialized().\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing\nBug: 36692143\nChange-Id: Ib5e19326b1149b2aef586b905ce89470c3a8e405\n"
    },
    {
      "commit": "e0bbab9fe1b073fecae78ca5d269bd0b2a177b4f",
      "tree": "a6152ee32301ac78084be69fc73c8d54134da8b2",
      "parents": [
        "52c468a765f0427dfb5a6627e8087e7b8acc3b8b"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Thu Jul 25 12:28:22 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Jul 29 20:10:20 2019 +0000"
      },
      "message": "ART: Verifier cleanup\n\nStart making the method verifier more independent of externalities.\nThis will be implemented as incremental changes.\n\nIn this CL, replace querrying Runtime::Current() for the classlinker\nwith requiring the classlinker to use at construction time.\n\nTest: m test-art-host\nChange-Id: Id0a6a1f01c77bfe4cc9adfb490fc6ebc7bbf6392\n"
    },
    {
      "commit": "bf12191214c0d6215a98dfe846a51230d995dad9",
      "tree": "085c1059014ce66fdb7eceb6e8502d906f0eacbd",
      "parents": [
        "78342419743cb6d0f17dc2d4c0cd99d18d9c83d6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 04 13:49:05 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jul 26 11:10:26 2019 +0000"
      },
      "message": "Implement ClassStatus::kVisiblyInitialized.\n\nPreviously all class initialization checks involved a memory\nbarrier to ensure appropriate memory visibility. We change\nthat by introducing the kVisiblyInitialized status which can\nbe checked without a memory barrier. Before we mark a class\nas visibly initialized, we run a checkpoint on all threads\nto ensure memory visibility. This is done in batches for up\nto 32 classes to reduce the overhead.\n\nAvoiding memory barriers in the compiled code reduces code\nsize and improves performance. This is also the first step\ntoward fixing a long-standing synchronization bug 18161648.\n\nPrebuilt sizes for aosp_taimen-userdebug:\n - before:\n   arm/boot*.oat: 19150696\n   arm64/boot*.oat: 22574336\n   oat/arm64/services.odex: 21929800\n - after:\n   arm/boot*.oat: 19134508 (-16KiB)\n   arm64/boot*.oat: 22553664 (-20KiB)\n   oat/arm64/services.odex: 21888760 (-40KiB)\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots\nTest: run-gtests.sh -j4\nTest: testrunner.py --target --optimizing\nTest: Manually diff `m dump-oat-boot` output from before\n      with output after this CL without codegen changes,\n      with `sed` replacements for class status. Check that\n      only checksums and the oatdump runtime values of\n      DexCache.dexFile differ.\nBug: 18161648\nBug: 36692143\nChange-Id: Ida10439d347e680a0abf4674546923374ffaa957\n"
    },
    {
      "commit": "af8647023ea8e90fd37814f2da7aa3a901de8484",
      "tree": "c6d8a0210175028360d1f0f02eebb35cf336af31",
      "parents": [
        "7ee607e39cfbfc59616dbf4c063cd1169dc4350f"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 23 14:05:35 2019 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue Jul 23 14:05:35 2019 -0700"
      },
      "message": "ART: Correctly exclude super-init times in classlinker\n\nSubtract the times for initializing superclass and interfaces to\nnot double-count.\n\nTest: m\nTest: manual\nChange-Id: Ibf4409f8390107c20a1c1b812aa6ea6567ca0a4b\n"
    },
    {
      "commit": "70e2a7694b1d9aa926e1ff05c541574d1d89a28c",
      "tree": "aefc1b15d28cacd17f61d18a4bcbe341b043effa",
      "parents": [
        "da40acad8760aacd4bc3b636fbdb5f8107d3e00f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jul 12 16:49:00 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 23 08:35:23 2019 +0000"
      },
      "message": "Initialize array classes in pre-fence visitor.\n\nRewrite array class initialization to make it easier to\nreason about memory visibility. Initialize all members in\nthe pre-fence visitor for the normal use case. Refactor\ninitialization of core array classes without boot image to\navoid special-casing in ClassLinker::CreateArrayClass().\n\nNote that the Class::object_size_alloc_fast_path_ field\nof primitive classes (instances of which cannot be\nallocated) will be kept at numeric_limits\u003cuint32_t\u003e::max().\nThe boot image before and after is otherwise identical.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing\nChange-Id: I570e3af011c8d3383ce46c81eb6f2fa60c5a4b0f\n"
    },
    {
      "commit": "0c2c222733f3bb1dc9848f4f127a47046fda6221",
      "tree": "bf46d1a9d1bf38dcbd01947b5ffcc28e659fbdef",
      "parents": [
        "1a225a76ee6bc29833aee048b6cfae20242bdc8b"
      ],
      "author": {
        "name": "Chang Xing",
        "email": "chxing@google.com",
        "time": "Fri Aug 04 14:36:17 2017 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Thu Jul 18 17:13:59 2019 +0000"
      },
      "message": "Revert^2 \"Support clinit for app image during compilation\"\n\nAdd some spot fixes for app image class initialization and re-enable\ntest 660 features.\n\nBug: 70735003\nTest: test-art-host\n\nThis reverts commit abadf024efdc632f663d7fb503cd277b3f65fca2.\n\nChange-Id: Id16fd3ada3eb1bd57ea60c3cdc4a0cf9835950d7\n"
    },
    {
      "commit": "323844002e54243e295497e7f829e46a533da621",
      "tree": "e6219f651332ee140042e4e0d4c975919f4fe9bf",
      "parents": [
        "297a0533d2e3f1d49f0b73c5d1e3b09ce0418de2"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 17 20:06:44 2019 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 18 13:12:57 2019 +0000"
      },
      "message": "jitzygote: Handle case of methods having the resolution stub.\n\nWe need to cache the compiled code until the class is initialized.\n\nTest: test.py\nTest: jitzygote config boots\nBug: 119800099\nChange-Id: Ib7a1efc3e101d9dabfad963621a1fe4a142e9b29\n"
    },
    {
      "commit": "31c3daa15da0599b0f916202c49ef4d35e77213b",
      "tree": "3966159700b54af8a39a8b426ab06c8c4b6960f1",
      "parents": [
        "b476a29a2cda22b86fc1d96e4cc65ce36fb878af"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 13 12:18:37 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 27 08:25:24 2019 +0000"
      },
      "message": "GC-independent image layout.\n\nMake sure we visit objects in a defined order, independent\nof their order in the heap. The new order depends only on\ndex file contents and contents of initialized classes,\nthus any non-determinism would have to be contributed by\nthe class initialization itself rather than GC.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing\nBug: 26687569\nChange-Id: I62521322289a22eb13faae526ba2c3589e6ab381\n"
    },
    {
      "commit": "9b7f8b5e6dd3af8ce105ef40aedd2fbbc83b419a",
      "tree": "5ad276e74c57a2506992f35d1557112fb7101c39",
      "parents": [
        "9c87c02437339e08cb99cf7572820001799cdfa0"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jun 07 08:59:29 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jun 20 16:41:46 2019 +0000"
      },
      "message": "ART: Dump class initialization stats durig SIGQUIT\n\nAdd class initialization metrics to the dump code.\n\nTest: mmma art\nTest: manual\nChange-Id: Ib086662f7506bf7de403130fb2b7d3591d95f882\n"
    },
    {
      "commit": "77f84fcc257bba0b40cb123a748ecbd0a96726b2",
      "tree": "f1029d8f5213fd989cd6319eaf4f5a12c36af459",
      "parents": [
        "d91f84166ad642bbd135acb8aadd05919ff41d85"
      ],
      "author": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Fri Jun 14 12:49:54 2019 -0700"
      },
      "committer": {
        "name": "Mathieu Chartier",
        "email": "mathieuc@google.com",
        "time": "Mon Jun 17 09:10:26 2019 -0700"
      },
      "message": "Handle cleared preresolved strings\n\nThe profile saver can theoretically result in the preresolved strings\nbeing cleared before they are updated. Since the clearing process\nnulls the array, it was causing a null pointer dereference in some\ncases.\n\nBug: 134698657\nTest: test-art-host\nChange-Id: I9c260bbfded26e9481381e9978596907e48c3307\n"
    },
    {
      "commit": "024d69fb9936ca5a0031d35c9f248853cbc25d3f",
      "tree": "c1eeddf91ea15eda5d139d4592ac7f0df80e9be0",
      "parents": [
        "43ae4acf219fe25a56e2055ebcebc4d08020a25d"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 13 10:52:32 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 17 09:30:53 2019 +0000"
      },
      "message": "Use cleared JNI weak sentinel from boot image.\n\nWe were already adding the sentinel to the boot image,\nso we may as well reuse the boot image copy.\n\nAlso move pre-allocated objects from class roots to the\nboot image live objects.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nChange-Id: I635dcdd146ca2c6b55d187e9a545a9990b0b35ca\n"
    },
    {
      "commit": "8e05f09ca712c33bf2090cf03a3a8db858a23314",
      "tree": "c78491d8a9ef33f4073d0053dfbd6417bbaa13a9",
      "parents": [
        "23df24822ee70fe255e6c02fb130112e28fdf63a"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 10 11:10:38 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 12 08:44:25 2019 +0000"
      },
      "message": "Do not force-intern Strings in images.\n\nInterning all image Strings breaks the reference equality\nsemantics. See android.net.Uri.NOT_CACHED for an example\nwhere it goes against the intent of the Java code.\n\nInstead, only put interned strings (weakly and strongly) to\nthe image intern tables. Since image interns are referenced\nas long as the image is memory, we can promote weak interns\nto strong interns. Doing this before the image layout helps\nImageWriter::CalculateNewObjectOffsets() which would not\nhave previously found weak interns.\n\nAdded a regression test that relies on better initialization\nof app image classes, so it shall be \"active\" only after an\nimprovement in that area. (This can be checked by commenting\nout the NoClinitInDependency() check in CompilerDriver\u0027s\nInitializeClassVisitor::TryInitializeClass().)\n\nBug: 134746125\nTest: 176-app-image-string\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nTest: aosp_taimen-userdebug boots.\nTest: run-gtests.sh\nTest: testrunner.py --target --optimizing\nChange-Id: I51fa1edf953c9060c41f39812f3ba27f12b02801\n"
    },
    {
      "commit": "3068d582eff4552ff260d7966fcbdc93e17d0207",
      "tree": "bc894a414070a06ea2a231fb98607b57b8c3b0cb",
      "parents": [
        "991cd5cc16267b74e390f640eb441102062babb6"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue May 28 16:39:29 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 31 14:15:59 2019 +0000"
      },
      "message": "Clean up creating handles from `this`.\n\nMake these member functions static and take an additional\nparameter `Handle\u003c.\u003e h_this`. Callers mostly already have\na Handle\u003c\u003e to pass, so we avoid an extra StackHandleScope.\nThis pattern was already used for some functions.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --interpreter\nChange-Id: I4f4478b0526bcb2f3c23305d3b3cc4a65fff9ff5\n"
    },
    {
      "commit": "991cd5cc16267b74e390f640eb441102062babb6",
      "tree": "d6112197d0bfec05d5a66da2b27578504385b9f5",
      "parents": [
        "78da5e255d1281412e9f7e4f0c9b4e90ba7f02b5"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu May 30 14:23:39 2019 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri May 31 14:15:59 2019 +0000"
      },
      "message": "Add default template args to Heap::Alloc*Object*().\n\nNamely kInstrumented\u003dtrue and kCheckLargeObject\u003dtrue.\n\nThis is a follow-up after\n    https://android-review.googlesource.com/963693\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nChange-Id: I6c23e76f90f1892382c3bb8c331d12437bc23f89\n"
    },
    {
      "commit": "19f5416eb86bdffa489099ffc4ac9c9ad35438d6",
      "tree": "730beadde252ff3c6e278112244987c07bc65dc4",
      "parents": [
        "43e72433fd2115b4213b5db06568ebd1c550e7d1"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Tue May 14 16:16:28 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 16 01:01:01 2019 +0000"
      },
      "message": "ART: Remove runtime.h file_utils.h (iwyu)\n\nIt is unnecessary. Fix up transitive includes.\n\nTest: mmma art\nChange-Id: Idf25e8df37a3924cc88b5a549b715e9206ca0757\n"
    }
  ],
  "next": "b0625e0bcb2897f43911d869eddcb3955755c75d"
}
