)]}'
{
  "log": [
    {
      "commit": "b15e8797d2ca6fb480a940887c66dd2aae7c9065",
      "tree": "23bd6e44c31b45fde7d92bbe7620329a61c1fcf5",
      "parents": [
        "79bf0b8e9c704e63029bb3badf9c4872484a827b"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Oct 28 12:20:59 2020 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Nov 10 09:46:01 2020 +0000"
      },
      "message": "Verify ART run-tests\u0027 standard output and standard error separately.\n\nIntroduce expected standard error files for ART run-tests. Collect\ntests\u0027 standard output and standard error separately and check them\nagainst the corresponding expectation file.\n\nTest: Run ART run-tests on host and device using `testrunner.py`.\nTest: atest --test-mapping art:all\nTest: atest --test-mapping cts/hostsidetests/jvmti:all\nBug: 171865375\nBug: 147812905\nChange-Id: Ie95bec4a4684ff6791d464124ce8976339432d1f\n"
    },
    {
      "commit": "a073f46104fbce0482fb759d5ccfb32ee39cc973",
      "tree": "985538ce69fa4d9253725cddaca936ddc3eaea86",
      "parents": [
        "5a19854c682a994729f704806d6c0de1de349631"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Wed Oct 28 12:48:24 2020 +0000"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Thu Nov 05 18:15:49 2020 +0000"
      },
      "message": "Rename ART run-tests `expected.txt` files as `expected-stdout.txt`.\n\nThis is in preparation for the addition of `expected-stderr.txt` files\nin all ART run-test directories, which will record the expected\nstandard error for each of these tests, and which will be verified\nalong with `expected-stdout.txt`.\n\nTest: Run ART run-tests on host and device using `testrunner.py`.\nTest: atest --test-mapping art:all\nBug: 171865375\nBug: 147812905\nChange-Id: I37e3c4b8409475790e2fc63514cdf57156d47ff4\n"
    },
    {
      "commit": "6395908ae441946b5241906dff5aec2099444179",
      "tree": "20d9b9cbc0eb236099fd57ee42a091e2322748f6",
      "parents": [
        "433e49fb16d35154636e71040c74177b79bb5259"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Mon Jul 27 15:48:20 2020 +0100"
      },
      "committer": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Jul 28 10:48:17 2020 +0000"
      },
      "message": "Inclusive language fixes in ART run-tests.\n\nUpdate language to comply with Android’s inclusive language guidance.\nSee https://source.android.com/setup/contribute/respectful-code for\nreference.\n\n#inclusivefixit\n\nTest: Run ART run-tests\nBug: 161336379\nBug: 161896447\nChange-Id: I23558d86b9d3a41b96a223c4aa56c0e06b240551\n"
    },
    {
      "commit": "5c7f367987080488fdb4e52a13dd92a4cafd798f",
      "tree": "ce94da08f3fe9678256d123e83920fa2f5f62fbd",
      "parents": [
        "7e2c963b572dff7aded82d5524b5ece81f7e0210"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Jan 27 15:23:30 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jan 28 01:21:03 2020 +0000"
      },
      "message": "Make test 1983 more consistent\n\nOn CTS the classes we can structurally redefine might change based on\nwhat JNI id\u0027s are requested prior to the zygote-fork. This can lead to\ndifferent outcomes for this test. To prevent this don\u0027t check BCP\nclasses which are potentially structurally redefinable on CTS runs.\n\nBug: 148079561\nTest: atest CtsJvmtiRunTest1983HostTestCases\nChange-Id: Ie76686499a873240c25a98f0893f9df2fc907124\n"
    },
    {
      "commit": "fe0ce64326bc0531616fb6b5388400cd9787370e",
      "tree": "2b176d562034d35949e9e646beec263006e29eb1",
      "parents": [
        "e8e544dc8909155560af0c7381df3833b2e7f701"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Jan 07 13:14:18 2020 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jan 15 08:24:52 2020 +0000"
      },
      "message": "Add structural redef tests to CTS\n\nThis adds structural redefinition and other JVMTI run-tests to CTS\nwhere possible.\n\nTest: atest -bit --test-mapping cts/hostsidetests/jvmti/TEST_MAPPING\nBug: 134162467\n\nChange-Id: If8e36ea8d228253928cb9b9f6a35a284250641e9\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": "f1b809ce611e943f926fff97cefe0930226ffcc2",
      "tree": "f75675383cf8018f9f333e608df35edbacf1c913",
      "parents": [
        "20b7a9b8aeaf76fc8f3248f211489fd00af73170"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 26 18:52:06 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 02 18:34:20 2019 +0000"
      },
      "message": "Revert^2 \"Allow structural redefinition on non-final classes.\"\n\nWe were incorrectly racing with the rest of the runtime in a couple of\nplaces. First we would return an ObjPtr of a newly defined class after\nholding it over a suspend point. This could lead to DefineClass\nreturning an obsolete class in some cases.\n\nWe also failed to ensure the class-status was synchronized between the\nold and new classes during structural redefinition. This could lead to\na class appearing to go backwards in status.\n\nThis reverts commit 88b1c83080afcb2bfb6f781ded1c90fe8f9eab4d.\n\nReason for revert: Fixed issues causing test failures.\n\nTest: ./test.py --host\nBug: 134162467\nBug: 144168550\n\nChange-Id: I4d0f7718490532f0ef14a9561b8e7000ef292b12\n"
    },
    {
      "commit": "88b1c83080afcb2bfb6f781ded1c90fe8f9eab4d",
      "tree": "e3ee63ccca83c60c5790e51610349889f44daacf",
      "parents": [
        "8e895008a3e2f2813bb46cb0c6bc76884e46e9ac"
      ],
      "author": {
        "name": "Roland Levillain",
        "email": "rpl@google.com",
        "time": "Tue Nov 26 14:13:44 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Nov 26 15:55:26 2019 +0000"
      },
      "message": "Revert \"Allow structural redefinition on non-final classes.\"\n\nThis reverts commit c47040d31cbcd8cddd5fadb552b4f0f6c94b5bd0.\n\nReason for revert: Breaks ART tests (see e.g. b/145197371).\n\nBug: 145197371\nBug: 134162467\nBug: 144168550\nChange-Id: Ia8e5788655057e380fc723a38900d26d69cda938\n"
    },
    {
      "commit": "c47040d31cbcd8cddd5fadb552b4f0f6c94b5bd0",
      "tree": "50df569420cd6746daadf1487933719d1f86d66b",
      "parents": [
        "dc540dfffb6863177143d024dd6f491775d77585"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Wed Nov 13 09:33:52 2019 -0800"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Nov 26 02:11:19 2019 +0000"
      },
      "message": "Allow structural redefinition on non-final classes.\n\nThis adds support for structurally redefining non-final,\nnon-finalizable classes. The only restriction is that one cannot\nredefine a class at the same time as any of its supertypes, if a\nstructural redefinition is occurring. The structural redefinition may\nnot remove any fields or methods, change the superclass or change the\nimplemented interfaces. Adding new methods or fields, both static or\nnon-static, public, private, protected, or package-private, is\nsupported.\n\nTest: ./test.py --host\nBug: 134162467\nBug: 144168550\nChange-Id: I32e9e854b3e56270170b10e8f5aba9de8f6bfdfa\n"
    },
    {
      "commit": "986914bfd60c1cace9726e9029598d72cbf279e1",
      "tree": "556e5549254e4d5b280a63451fa8673ab36fba7b",
      "parents": [
        "5697faba0e910374da285f5f848d2aaf7ee6ffec"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 19 01:12:25 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Nov 19 17:15:48 2019 +0000"
      },
      "message": "Revert^4 \"Initial support for adding virtuals with structural redefinition\"\n\nThis reverts commit 2f8c1ac61b0c611d67badea70261c851ed19b82a.\n\nIf there were pending tasks to jit compile a method which is made\nobsolete the JIT would CHECK fail, since the newly obsolete method is\nmarked DontCompile. This didn\u0027t happen with non-structural\nredefinition since in that case the \u0027valid\u0027 ArtMethod always remains\nthe same.\n\nTo fix this we just have the JitTask check if the method it\u0027s\ncompiling is compilable and fail if it\u0027s not.\n\nReason for revert: Fixed JIT check failure.\n\nTest: ./test.py --host\nBug: 134162467\nBug: 144168550\nBug: 144729319\nChange-Id: Ib867b2de13bb4c2978b4538a5851c647caf0e1cc\n"
    },
    {
      "commit": "2f8c1ac61b0c611d67badea70261c851ed19b82a",
      "tree": "97f87c13f69d033cf3f4120af66a7c5391c2da35",
      "parents": [
        "96d8585ebb9e21fc27a59ddd4173ca62ad93c194"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 19 01:09:31 2019 +0000"
      },
      "committer": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Nov 19 01:11:18 2019 +0000"
      },
      "message": "Revert^3 \"Initial support for adding virtuals with structural redefinition\"\n\nThis reverts commit 8ba9738d55c11dfb7f85a7de9b1d6a4e1225ad20.\n\nReason for revert: Seems to be failing with `Check failed: method-\u003eIsCompilable()`\n\nTest: None\nBug: 134162467\nBug: 144168550\nBug: 144729319\nChange-Id: Ida9228fa171ae16d803b5ad4438e233a2ed4ffb2\n"
    },
    {
      "commit": "8ba9738d55c11dfb7f85a7de9b1d6a4e1225ad20",
      "tree": "5aabe6d6af38514af0822ab9529a39f542aaa175",
      "parents": [
        "0d508a01106746e0d8865752850f4f03bcce1e01"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Mon Nov 18 17:52:55 2019 +0000"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Nov 18 20:19:43 2019 +0000"
      },
      "message": "Revert^2 \"Initial support for adding virtuals with structural redefinition\"\n\nThis reverts commit d0e354e54da2f2e79b6fc2ff0e13d53c74976b08.\n\nWe were incorrectly continuing to use an ObjPtr over a suspend point\n(in this case a CollectGarbageInternal). This led for the ObjPtr to be\ninvalidated. Instead we should have been using a Handle (that already\nexists).\n\nReason for revert: Fixed stale ObjPtr use.\n\nTest: ./test.py --host\nTest: ./test/testrunner/run_build_test_target.py -j80 art-debug-gc\nBug: 134162467\nBug: 144168550\nBug: 144590579\nChange-Id: Ied9856a707d377e97d34c7450376caf2a0b83255\n"
    },
    {
      "commit": "d0e354e54da2f2e79b6fc2ff0e13d53c74976b08",
      "tree": "743c595ef2cd94f89b487974e698d18c7d297330",
      "parents": [
        "c0200a984cacb6c0911d046a018cd11c7d20646b"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 18 08:37:50 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon Nov 18 08:38:15 2019 +0000"
      },
      "message": "Revert \"Initial support for adding virtuals with structural redefinition\"\n\nThis reverts commit 283bb322de84ac570b987c65a1015e2dbcbfad7c.\n\nReason for revert: Test flakes\n\nBug: 134162467\nBug: 144168550\nBug: 144590579\nChange-Id: I2259c030f03a72f6b7bcda10288bd23cb3258164\n"
    },
    {
      "commit": "283bb322de84ac570b987c65a1015e2dbcbfad7c",
      "tree": "18f5d68c78e56a2d398192c8340269a60706b7a0",
      "parents": [
        "2c5dfe16ab2b0f8fbd14dedc161eb4658a8673fc"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Oct 29 11:15:05 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Nov 16 00:26:03 2019 +0000"
      },
      "message": "Initial support for adding virtuals with structural redefinition\n\nInitial implementation of adding virtual methods and non-static fields\nusing structural redefinition. Currently this is limited to \u0027final\u0027,\nnon-finalizable classes. These restrictions will be removed or\nloosened in the future.\n\nAll non-collected instances of the redefined class will be made\nobsolete and reallocated. This can cause significant GC load.\n\nThis feature does not work with any of the -quick opcodes and should\nonly be used with dex files that haven\u0027t undergone dex2dex\ncompilation (that is --debuggable and BCP dex files).\n\nTest: ./test.py --host\nBug: 134162467\nBug: 144168550\n\nChange-Id: Ia401d97395cfe498eb849a661ea9a900dfaa6da3\n"
    },
    {
      "commit": "4ac0e1571e015a01d75091c3daef065f9624ad77",
      "tree": "4d13edeab88bd6fd724388c48385b0c3cca4f3a8",
      "parents": [
        "5a2301d897294ff4ee6de71f459dc2566dc3fa1a"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 18 06:14:50 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 18 06:14:50 2019 +0000"
      },
      "message": "Revert \"Revert \"Basic structural redefinition support\"\"\n\nThis reverts commit 5a2301d897294ff4ee6de71f459dc2566dc3fa1a.\n\nBug: 134162467\n\nReason for revert: Relanding as unclear if issue is due to topic.\n\nChange-Id: Ib1d1cf2e9132e30c9649b760ae9ae2d8ceacf843\n"
    },
    {
      "commit": "5a2301d897294ff4ee6de71f459dc2566dc3fa1a",
      "tree": "2bd06ab3f463734994b3d251f6115514520dbb3f",
      "parents": [
        "4eb6eb40e88214fcc874d93e75660cb580cb4d58"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 18 06:11:22 2019 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Sep 18 06:12:13 2019 +0000"
      },
      "message": "Revert \"Basic structural redefinition support\"\n\nThis reverts commit c971eafeff43e4e26959a6e86b62ab0a8f1a6e1c.\n\nBug: 134162467\n\nReason for revert: Breaks on redefine-stress\n\nChange-Id: I4e38da23d65b5b34b26b5ab537a3583328e078a4\n"
    },
    {
      "commit": "c971eafeff43e4e26959a6e86b62ab0a8f1a6e1c",
      "tree": "f8647487e7465712fd73118ceb89e13167a12648",
      "parents": [
        "1ba7e8c10af4e270864a417044244d63db53ccf5"
      ],
      "author": {
        "name": "Alex Light",
        "email": "allight@google.com",
        "time": "Tue Aug 13 10:50:38 2019 -0700"
      },
      "committer": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Sep 17 23:52:12 2019 +0000"
      },
      "message": "Basic structural redefinition support\n\nThis adds basic support for adding methods and fields to already\nloaded classes using redefinition. This \u0027structural class\nredefinition\u0027 is currently limited to classes without any virtual\nmethods or instance fields. One cannot currently structurally redefine\nmultiple classes at once nor will structural redefinition trigger the\nstandard redefinition events.\n\nAfter structural redefinition all references to the old class, and its\nfields and methods are atomically updated. Any memory associated with\nthe static fields of the old class is zeroed. Offsets for field access\nmight change.  If there are any active stack frames for methods from\nthe redefined class the original (obsolete method) code will continue\nto execute. The identity hash code of the redefined class will not\nchange. Any locks being held, waited or blocked on by the old class\nwill be transferred to the new class.\n\nTo use this feature the process must be debuggable and running with\n-Xopaque-jni-ids:true.\n\nFor device testing use a wrap.sh that adds the following flags:\n\n    \u0027-Xopaque-jni-ids:true -Xcompiler-option --debuggable -XjdwpProvider:adbconnection\u0027\n\nStructural redefinition only available using the\n\"com.android.art.UNSAFE.class.structurally_redefine_class_direct\"\nextension. This will not trigger the normal class-redefinition events.\nOnly one class may be redefined at a time.\n\nNB There are still some holes in this potentially allowing obsolete\nmethods/fields to be visible. Most notably during jni-id, MethodHandle\nand VarHandle creation as well as potentially other places in the\nruntime. These holes will be closed by later CLs. Until then the\nextension to access structural class redefinition will remain tagged\nas UNSAFE.\n\nTest: ./test.py --host --all-compiler\nBug: 134162467\n\nChange-Id: I825d3a4bdb9594c0147223ae69f433ce9bbfc307\n"
    }
  ]
}
