)]}'
{
  "log": [
    {
      "commit": "fb3ad7201bf2d9154862e347e960df376ac04c3c",
      "tree": "5f341409b0ec998fb26049efc988b81f5e6a946b",
      "parents": [
        "e84ad2c045f3439b9e20b977d74c7e4e394417a2"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Mon Aug 16 16:53:17 2021 +0000"
      },
      "committer": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Tue Aug 17 00:48:26 2021 +0000"
      },
      "message": "Revert \"Make ClassLinker::DumpForSigQuit exclude gc\"\n\nThis reverts commit 825e82972fe46fdb0419c42bd7df102df1989ff9.\n\nReason for revert: Not clear it fixed anything. See b/195261575 .\n\nChange-Id: I6fd0d10b5134037d2df399abbbaa3302454f0e4f\n"
    },
    {
      "commit": "825e82972fe46fdb0419c42bd7df102df1989ff9",
      "tree": "9f81ffa70d28a9021209bf508a052023e7495e2a",
      "parents": [
        "2d2a27fe91e0a5bb2a047b472ef8d5de9c5a6c73"
      ],
      "author": {
        "name": "Hans Boehm",
        "email": "hboehm@google.com",
        "time": "Mon Aug 02 17:12:29 2021 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Aug 07 01:03:51 2021 +0000"
      },
      "message": "Make ClassLinker::DumpForSigQuit exclude gc\n\nOtherwise we can get into a deadlock because we hold a critical lock\nwhile waiting for weak reference access, thus potentially preventing\nother threads from suspending properly to reenable weak reference\naccess.\n\nBug: 195261575\nTest: TreeHugger\nChange-Id: Ideb6199f597c4e06741c79bb2812661d88a42669\n"
    },
    {
      "commit": "4aebd580c9c9de348b8fefed6353b86621cceb53",
      "tree": "47f07ff4173534c92ff9673d6d423c4df13bbe6e",
      "parents": [
        "d7a4da1f357e089c5d150559d8d2f2ddb7c4958a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 23 15:27:31 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Jul 23 16:09:23 2021 +0000"
      },
      "message": "Add some null checks in case of OOME.\n\nTest: test.py\nBug: 194471075\nChange-Id: Ib02845636af4d3944a96f001e5ad728a94832285\n"
    },
    {
      "commit": "66934efcabd2b75fd84b3cc0a8665f4ecc136727",
      "tree": "b55d836b7df49dcc73126cbcded7a0e64451ba39",
      "parents": [
        "cf74ae7eae39affc8886b4bce5294aceebb908c3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 07 14:56:23 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Jul 15 14:26:13 2021 +0000"
      },
      "message": "Clean up ClassLinker::VerifyClass.\n\nAnd drop kAccWasVerificationAttempted. It\u0027s not needed and duplicates\nlogic already present in the compiler and the class status.\n\nThis CL also enables nterp running methods with soft failures.\n\nTest: test.py\nBug: 28313047\nChange-Id: I853a6f00b9e0c38091d86fcd77167c92ff5b383c\n"
    },
    {
      "commit": "7744b69abf073101b09b9043f0f0eb109768fcfe",
      "tree": "6598234dc0a9b2327729705cf61f836e3e777d58",
      "parents": [
        "eacf044aae6d7d515ac988dceedaadbf53916b60"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jul 06 16:19:32 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 14 13:17:09 2021 +0000"
      },
      "message": "Remove dual verification in RedefineClasses.\n\nAlso clean up the ClassVerifier interface with now just one method and\nthe removal of VerifierCallbacks.\n\nTest: test.py\nBug: 28313047\nChange-Id: I1a87dd1757cfdeec0d482f82dacd7cac43545964\n"
    },
    {
      "commit": "e4f983c808b0b7d2d9c39f34f67971bba1354b08",
      "tree": "80dd518ac4e7ea00670f2ebdb70efbe8b1f577cd",
      "parents": [
        "5f2f289b64f163e491b9b53364ce04874f82b4e3"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 12 15:53:27 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Jul 13 12:14:13 2021 +0000"
      },
      "message": "Remove mterp.\n\nTest: test.py\nChange-Id: Id800bcf86965ab19cf1e79ecbfa8996a6a6c335e\n"
    },
    {
      "commit": "6cd7ab38ec76943d1b9cdc2191f1260188511b2b",
      "tree": "7aea757a61ab1ac917d09151f08a6fc440cfa358",
      "parents": [
        "b17c908047a2df675ecb4bd0aa2b21114376bbae"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 07 09:35:50 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 07 11:39:34 2021 +0000"
      },
      "message": "Only set nterp entrypoint after a class is verified.\n\nIf a method needs lock counting, we need to use the switch interpreter.\n\nTest: test.py\nTest: 825-unbalanced-lock\nChange-Id: I50629d20305e01ce2efe75606b00641052378234\n"
    },
    {
      "commit": "4dc6589f392d46800a3b64625245bdfe4bbbfc2f",
      "tree": "b159262fd300a650ab89277667641ebe7e13d357",
      "parents": [
        "e0386f10d4591afa9823658099e4f2ac7a693255"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jul 05 17:43:35 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jul 07 07:13:01 2021 +0000"
      },
      "message": "Don\u0027t wrap VerifyError into NoClassDefFoundError.\n\nFollow RI behavior by returning the VerifyError. NoClassDefFoundError\nonly wraps initializer errors.\n\nAlso rename the field in ClassExt from verifyError to\nerroneousStateError for better clarity.\n\nAnd remove now unused feature of storing a class in the verifyError\nfield.\n\nTest: test.py\nTest: 824-verification-rethrow\nBug: 28313047\nChange-Id: I19383f7b74f22a62ab1e0b8a13bea75a14c7b33f\n"
    },
    {
      "commit": "dd411969bb486c36081926d61dbcc0bfbc8066a5",
      "tree": "aa0601299b351d41c349e64ed468cb2c9b95e6f4",
      "parents": [
        "f040914a122be86e280efe5e31af1168f2b7c72e"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jun 25 08:55:22 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 06 13:58:08 2021 +0000"
      },
      "message": "VarHandle: add StaticFieldVarHandle class\n\nAdd StaticFieldVarHandle class to keep a live reference to the\ndeclaring class for the target field of VarHandle\u0027s targeting static\nfields.\n\nBug: 191980149\nTest: art/test.py --host -r -g\nChange-Id: I3a1cada6591d146b8f9fc9066105e3b617290185\n"
    },
    {
      "commit": "b4bd92f27fb143135870d07b459ea52637afcfa5",
      "tree": "521f811ea786e178f685316b035fe6cb0ced0605",
      "parents": [
        "53a6334ac751aceb65d4994b81f4af815f749295"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jul 05 12:18:26 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jul 06 08:21:13 2021 +0000"
      },
      "message": "Faster hashing in `ClassLinker::LinkVirtualMethods()`.\n\nMeasurement shows that `ComputeModifiedUtf8Hash()` is faster\nwhen iterating over `std::string_view` than `const char*`.\nHowever, getting the length of the string with `strlen()`\nwould outweigh the benefits, so we shall only use the new\n`ComputeModifiedUtf8Hash(std::string_view)` overload when\nwe can avoid (or usually avoid) the `strlen()` call.\n\nIn `ClassLinker::LinkVirtualMethods()`, method names come\nfrom the dex file and we can avoid the `strlen()` call as\nlong as they are ASCII which is usually the case (at least\nfor boot class path methods; proguarded apps sometimes use\nnon-ASCII method names), so use `std::string_view` there.\nAlso simplify the code a bit, avoiding the UTF16 length\ncomparison. This has some trade-offs as we delay the length\ncomparison until we know the length in chars (and compare\nthat length instead) but we also replace `strcmp()` with a\nfaster `memcmp()`.\n\nThe changes to the Modified UTF-8 hashing API also prepare\nfor future work such as calculating array class descriptor\nhash without a string allocation for the full descriptor.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: I6d45f738903000c55d401b776906dac83fca1a19\n"
    },
    {
      "commit": "a4d28dd66683c1bc27ad936d30aee71e73b084db",
      "tree": "213bf9c43b8d9d8ec9642049faaa37020a509831",
      "parents": [
        "44dc8a300adb63b1bf465de555b7f8cce0481bb3"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 30 11:28:06 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Jun 30 13:21:12 2021 +0000"
      },
      "message": "Avoid marking proxy class as erroneous twice.\n\nThis code path was missed in\n    https://android-review.googlesource.com/102184 .\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 192246059\nChange-Id: Ie41c3d55b76667b186dc47999e024372669764f9\n"
    },
    {
      "commit": "44dc8a300adb63b1bf465de555b7f8cce0481bb3",
      "tree": "095bc4801079f46f36a474db3e05dded5f7971f8",
      "parents": [
        "c9df5ce4cca760b27e9650363eaba5b92d87324c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 21 15:23:49 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 30 13:04:57 2021 +0000"
      },
      "message": "verifier: do not infer an instruction will throw.\n\nTurning a regular instruction into a throwing one has currently\nundesirable consequences:\n1) It leads to inconsistencies between the AOT verification and the\n   runtime verification.\n2) It treats the following code dead and does not analyze it. We treat\n   this as an non-compilable method as it\u0027s a lot simpler for the\n   compiler to consider all code verified.\n3) It prevents verification optimizations like doing one-pass\n   analysis over the code.\n\nTo be AOT / runtime consistent and follow RI behavior, stop considering\nsuch instructions as throwing.\n\nWe make this API version dependent for app compatibility reasons.\n\nTest: test.py\nBug: 28313047\nChange-Id: I9c847043d1f431f642731a70f651c93ef22fdf86\n"
    },
    {
      "commit": "4ef36490afb1cfa6a29442c8d76938ec9fd9b9dc",
      "tree": "6c704a77c182cdca46e210f05c539c4723123056",
      "parents": [
        "d5abbb91247742d2bd8c4fc0adf60ad0512c0dfe"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 16 17:26:51 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Jun 21 12:05:56 2021 +0000"
      },
      "message": "Fix missing nterp initializing when loading a class.\n\nFor instance methods, we were not setting the nterp entrypoint.\n\nTest: test.py\nChange-Id: If3c5e0d30120e50b98340e11ca576de219741990\n"
    },
    {
      "commit": "40261171630159bfd46043c996be8521c453fee1",
      "tree": "3cae9dfcfd5f745b61da630d031eff4f67fe9185",
      "parents": [
        "af5d304844cd8e39fcc31ca4e07e3e887d2f0bd9"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 14 10:59:51 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 14 17:55:51 2021 +0000"
      },
      "message": "Rewrite static/instance field search by index.\n\nThe old search was looking for a field with the given field\nindex in the class as well as superclasses and, for static\nfields, all interfaces. This was useless as as a field index\ncan match only in the declaring class. So, if the field was\nnot found in the declaring class we would have unnecessarily\nsearched wrong classes before resorting to string search.\n\nReuse the optimized `Class::FindField` by turning it into\na template implementation that can skip unnecessary static\nor instance field searches. Implementing the static and\ninstance field search this way allows ClassLinker to call\nonly one overload of `Class::Find{Static,Instance}Field`\nand helps avoid string searches in more cases.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --interpreter\nBug: 181943478\nChange-Id: I23309c87c3702d98812adfec0279c483c9037f2c\n"
    },
    {
      "commit": "b10668cb6a34398eb720f9a6305ff9a51b3ebfd4",
      "tree": "ab155a0ae3c2966c20a3de68dbf53e6fe2ced86a",
      "parents": [
        "893e2edbd5aa14ab2ccb1800ccd3154f21a2d8a7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 10 09:52:53 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Jun 14 12:51:59 2021 +0000"
      },
      "message": "Clean up Class::GetDirectInterface().\n\nFetch array interfaces from the `IfTable`. This removes the\nonly use of the `Thread* self` argument, so we can remove\nthat argument. We also make the function non-static to avoid\nthe explicit `klass` argument. Similarly clean up arguments\nof `Class::FindClass()` and `Class::FindStaticClass()`.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: Id639b675b4eb331a777cf318eb61bd19e05de4f0\n"
    },
    {
      "commit": "e300c4e4eabe3388b730efe35561e54f1c306710",
      "tree": "1866d5772e2c3643f30aa32b7bf0c02cec2e4c18",
      "parents": [
        "f761f5887918375b842e4cc62ed9cbe7521c8444"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Jun 08 16:00:05 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jun 10 13:47:14 2021 +0000"
      },
      "message": "Faster Class::FindField().\n\nChange `Class::FindField()` to take dex cache and type index\narguments instead of strings and optimize it similarly to\n`Class::FindClassMethod()`, namely search by indexes when\npossible (except when searching interfaces where we only add\na TODO comment for now) and avoid `strlen()` calls for ASCII\nnames and type descriptors.\n\nUpdate `ClassLinker::FindResolvedFieldJLS()` to pass the new\narguments and replace all other `Class::FindField()` calls\nwith more direct calls as we know the classes where those\nfields are defined.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 181943478\nChange-Id: Iba798819043eb1b53b0dbc41ef8d7fd1c5d2164d\n"
    },
    {
      "commit": "4f6bb446f8fbaa192f4e5b69734414c66d5e1bae",
      "tree": "c07c8cf278137c14fda476ed682968ee3c01c65f",
      "parents": [
        "beb9f2012587035a5c30d0eca8af458b2ad659b7"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 02 18:05:51 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Jun 09 11:03:12 2021 +0000"
      },
      "message": "Remove palette hooks.\n\nMake the method be part of the official palette API.\n\nBug: 186016399\nBug: 185778652\nChange-Id: I3dc9e879c647fd63f5826091813613fd97e25c0d\n"
    },
    {
      "commit": "c63d9672264e894d8d409e8d582b4e086b26abca",
      "tree": "1e285cbab4c71aea3c8c37b4e4c5e8241a3ce117",
      "parents": [
        "0bf5b6729be507f1e78fc61f17554393dd978e46"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 31 15:50:39 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon May 17 13:42:11 2021 +0000"
      },
      "message": "Rewrite profile file format.\n\nThe new format contains one mandatory section and several\noptional sections. This allows extending the profile with\nnew sections that shall be ignored by old versions of ART.\n\nWe add an \"extra descriptors\" section to support class\nreferences without a `dex::TypeId` in the referencing dex\nfile. Type indexes between the dex file\u0027s `NumTypeIds()`\nand `DexFile::kDexNoIndex16` are used to index these extra\ndescriptors. This prepares for collecting array classes\nwhich shall be tied to the element type\u0027s dex file even\nwhen the array type is not needed by that dex file and has\nbeen used only from another dex file. It also allows inline\ncaches to be self-contained, so we can remove the profile\nindex from data structures and serialized data.\n\nThe creation of the the binary profile from text files is\nupdated to correctly allow array types to be stored as the\nprofiled classes using the \"extra descriptors\". However,\nthe interface for filling in inline caches remains unchanged\nfor now, so we require a `TypeId` in one of the processed\ndex files. The data collection by JIT has not been updated.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing --speed-profile\nTest: boots.\nTest: atest BootImageProfileTest\nBug: 148067697\nChange-Id: Idd5f709bdc0ab4a3c7480d69d1dfac72d6e818fc\n"
    },
    {
      "commit": "8078996ff904d3038f774c6c355796cfa42d67b2",
      "tree": "a8e5659963b3b558b46c19d9de9e9947b0cd48df",
      "parents": [
        "e059ef1ca72c1750f104194d6333931ee62120a9"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Apr 30 16:50:39 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed May 05 07:42:38 2021 +0000"
      },
      "message": "Handle a potential race when verifying dex files in the background.\n\nIn case the runtime has verified a class already, explicitly still\nperform another verification in order to get the verifier_deps\npopulated.\n\nTest: test.py\nChange-Id: I17dcec9545dab1b0cae170b584cd091f00145344\n"
    },
    {
      "commit": "1dab575cd635706f03d510763cb4ea1b115a2cee",
      "tree": "cc885f34c0c4c139e9095ee840e3936662243581",
      "parents": [
        "854725b10087bfe86b5a794093e88786ff7b9f28"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 25 15:41:33 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Apr 28 08:11:45 2021 +0000"
      },
      "message": "Remove some dead code around ClassTable.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 175869411\nChange-Id: Ifb3ac102129470aff6eb228e5523b240c113818f\n"
    },
    {
      "commit": "68c07589eb1a20ee311833fe76e816ee4bc9e404",
      "tree": "e39cd677eb97bdac46cbc5ca3943559d29a9a576",
      "parents": [
        "fac1a9a6f9ff2c5a030f1f3d51ceb3d86d48c994"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Apr 19 16:01:15 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Apr 20 10:11:33 2021 +0000"
      },
      "message": "Clean up defining classes in ClassLinker.\n\nChange ClassLinker::FindClassInBaseDexClassLoaderClassPath()\nto separate class def lookup from class definition to avoid\ndeep call hierarchy and clean up an obsolete comment.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 148412019\nChange-Id: If3d3900c06579a38065b24cff61f8c256209690d\n"
    },
    {
      "commit": "af61f50d54574070b9a5b6647822c608cc92a9b3",
      "tree": "70f0cfa7092bbef6e68ed82fde19529894db5b96",
      "parents": [
        "efe9a3d20b49654cc70e7c15d9aec24d11e14c28"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 31 16:03:50 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu Apr 01 08:33:53 2021 +0000"
      },
      "message": "Reland \"Change JNI behavior related to hiddenapi.\"\n\nThis reverts commit dbcf4a2a597309f33914fb60dc09e1056032794a.\n\nBug: 178680596\nBug: 122551864\nBug: 184067905\n\nReason for revert: Limit the lookup of an accessible interface to an\ninterface part of the SDK.\n\nChange-Id: If08269908044bc0f2abe1967b6d952b1e828179b\n"
    },
    {
      "commit": "ac57691c29ffa8a31d0b789492ee3f904c059f89",
      "tree": "928969620553619e0fede06c18967c182a4b32aa",
      "parents": [
        "9d393d52fe27199325c7c123533fbc513a8af454"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 31 11:16:22 2021 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Mar 31 14:12:53 2021 +0000"
      },
      "message": "dex2oat: Do not crash on InitializeClass() exceptions.\n\nPreviously `ClassLinker::EnsureInitialized()` could have\nreturned with a pending exception even when initializing\nfields and parents was not allowed and the CompilerDriver\ndid not expect it, leading to a crash. Change the behavior\nto consistently suppress exceptions when initializing\nfields and/or parents is not allowed.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 184094466\nChange-Id: I6a8af8c1da792c946f8f52ed4513ab1f0ccf2c9f\n"
    },
    {
      "commit": "dbcf4a2a597309f33914fb60dc09e1056032794a",
      "tree": "b01cf79b4fdf1df81193a255fd4a3ec98a952713",
      "parents": [
        "26095cda197448071fbbc6af126363de1b4e8b4c"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 31 09:13:32 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 31 12:49:05 2021 +0000"
      },
      "message": "Revert \"Change JNI behavior related to hiddenapi.\"\n\nThis reverts commit 579db19af4f718c1aac5ca95c180a70c5114c6bd.\n\nBug: 178680596\nBug: 122551864\nBug: 184067905\n\nReason for revert: b/184067905\n\nChange-Id: I1c989b6d937b818e4779d7dd9f35abd30be2aa58\n"
    },
    {
      "commit": "579db19af4f718c1aac5ca95c180a70c5114c6bd",
      "tree": "6f01108583a4e8edf00b094d8f30d6348516d570",
      "parents": [
        "26a759688bdd376db7ed429ae07e136ff21f2411"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 29 16:50:37 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 30 13:16:32 2021 +0000"
      },
      "message": "Change JNI 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: Ibca0960e93ee399718716395ff9ed1f1c4e246b2\n"
    },
    {
      "commit": "43c9cd7938a53265ea9899a604b409ce070cc2c5",
      "tree": "db084fcc115d6a68de25662bf1a5fae030bcf152",
      "parents": [
        "443fc8962db219177c34cd047d2071b5ee775468"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 10 15:09:19 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Mar 24 16:47:38 2021 +0000"
      },
      "message": "Improve nterp -\u003e compiled code transitions.\n\nUse an unused bit in the access flags of an ArtMethod (0x00200000) to store\nthe information a method only takes ints or references and returns an\nint, a reference, or a long. This avoids the need to fetch the shorty in nterp\nwhen doing a call.\n\nTest: test.py\nTest: 821-many-args\nBug: 112676029\n\nChange-Id: Ie657ccf69c17c1097dc2a97f18e3093ef3be391b\n"
    },
    {
      "commit": "40cd07c3e6717b28c0137e8d72a067a9f8663ec6",
      "tree": "45cced150c54d6798805882c10607f11b1be9b36",
      "parents": [
        "4924ea9ad98832f0ec7db841defca82331ee1b13"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 15 18:33:23 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Tue Mar 23 15:31:45 2021 +0000"
      },
      "message": "Add a fast path for nterp entrypoint to avoid fetching the shorty.\n\nWhen all parameters are references, we don\u0027t need to look at the shorty.\nUse the 0x00100000 flag in the modifiers which is free for non-native\nmethods.\n\nTest: test.py\nBug: 112676029\nChange-Id: Ied9a253f7f7230045dd13188a5b806fb1d6d019d\n"
    },
    {
      "commit": "5b0b2e1b5d60514b829f99aed5712dcae3647115",
      "tree": "45b58e4e97de2112fd0903a7de0d6a5a86ff3ba6",
      "parents": [
        "f0407cf39600b2e87ee6c18f066df2987bd4ba29"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri Mar 19 14:48:40 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Mar 22 14:03:36 2021 +0000"
      },
      "message": "Explictly pass VerifierDeps when asking for class verification.\n\nThis will simplify creating and populating VerifierDeps at runtime,\nwhich is needed for doing and saving background verifcation of secondary\ndex files.\n\nTest: test.py\nBug: 158463186\nChange-Id: Ic17913ebd173700e866ba9309bf6ae131fcbc423\n"
    },
    {
      "commit": "de0d0de0f4a5162a5861515c0ddbbb52e06147d0",
      "tree": "d5aa36d70696f79a601d2cdcd47d1c5f506bf222",
      "parents": [
        "ec388c026a5709dea339ad43f8bca10b2d991d6e"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Mar 18 14:12:35 2021 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Mar 19 09:11:41 2021 +0000"
      },
      "message": "Remove kAccMiranda and kAccDefaultConflicting.\n\nUse a combination of other existing flags to mark miranda\nand default conflicting methods.\n\nAlso change the value of identical flags kAccCriticalNative\nand kAccPreCompiled to 0x00100000 to have the values of\nkAccFastNative and kAccCriticalNative in consecutive bits.\n\nThe method access flag 0x00200000 is now free for future\nuse. The method access flag 0x00100000 is also potentially\nusable for some methods the same way that the old\nkAccMiranda flag was used despite sharing the same value\nwith both kAccCriticalNative and kAccPreCompiled.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 112676029\nChange-Id: Ibfd20598f9b4af78e1e72f8331dc647d01dd8eb5\n"
    },
    {
      "commit": "b9b7d91f5ceb0b738e1774992fd6fe205c6091e9",
      "tree": "06210044d3f66a0eb72e491ba9effc13bb827ced",
      "parents": [
        "4c3ade67c470543562a0029e39b576954a807321"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Wed Feb 24 09:24:47 2021 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Thu Feb 25 12:12:16 2021 +0000"
      },
      "message": "Revert \"Lazily allocate DexCache arrays.\"\n\nThis reverts commit 1214319d27e7fb4c4ff00b39799df6f15288098a.\n\nReason for revert: Post-submit fails\nBug: b/181097963\nTest: TH\n\nChange-Id: I9fd21140f1703d0020458b786f48bd39889a9948\n"
    },
    {
      "commit": "1214319d27e7fb4c4ff00b39799df6f15288098a",
      "tree": "8708943822a634322bd9790c4d008210e44b3ddb",
      "parents": [
        "b7cb691fb8da124e8a6276a5a7fee47dd0aaa338"
      ],
      "author": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Feb 16 14:06:31 2021 +0000"
      },
      "committer": {
        "name": "David Srbecky",
        "email": "dsrbecky@google.com",
        "time": "Tue Feb 23 15:24:27 2021 +0000"
      },
      "message": "Lazily allocate DexCache arrays.\n\nWe rarely need the DexCache for compiled code.\nDelay the allocation in hope we never need it.\n\nThis reduces DexCache memory usage by ~25% at startup.\n\nTest: m test-art-host-gtest\nTest: test.py -r -b --host\nChange-Id: I680a59c905c2b821ee954e4b32abd5d24876bd11\n"
    },
    {
      "commit": "74584e6b65b6d5949afa9de664b05f453d42872b",
      "tree": "7d4ff8395607f4d64b393e91b5db7d6c1ee45adb",
      "parents": [
        "27b8cb7bb6ba85ca0a903f02c7d38b9f24636af7"
      ],
      "author": {
        "name": "Eric Holk",
        "email": "eholk@google.com",
        "time": "Thu Feb 18 14:39:17 2021 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Feb 22 22:28:15 2021 +0000"
      },
      "message": "[metrics] Add ClassLoadingTotalTime counter\n\nThis keeps track of how much time we spend in the class loading\nprocess.\n\nTesting instructions:\n\n   adb shell setprop dalvik.vm.metrics.write-to-log true\n   adb shell stop \u0026\u0026 adb shell start\n   adb logcat -e \"ART internal metrics\"\n\nObserver ClassLoadingTotalTime in internal metrics report. Example:\n\n    *** ART internal metrics ***\n      Metadata:\n        timestamp_since_start_ms: 34555\n        session_id: 2710488913234081424\n        uid: 10065\n        compilation_reason: Unknown\n        compiler_filter: (unspecified)\n      Metrics:\n        ClassLoadingTotalTime: count \u003d 120959\n        ClassVerificationTotalTime: count \u003d 216121\n        JitMethodCompileTime: range \u003d 0...1000000, buckets: 4482,10,2,3\n    *** Done dumping ART internal metrics ***\n\nBug: 177591870\nTest: Manual, see above\nChange-Id: I24f0c94ab6af5e6cd9b0dc32122f2905c36cf3b7\n"
    },
    {
      "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"
    }
  ],
  "next": "7dac864d7eae3d731eeacf55cfc7f71b4df6cee3"
}
