)]}'
{
  "log": [
    {
      "commit": "ec06809b9fb7d4a0d2c3e46066bd37034130e53b",
      "tree": "c3a69b142e38d249a01ed425cde23caa78c1d36c",
      "parents": [
        "1651c6050d913fb38ebd293df9da6d189eb3851d"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Mon May 10 17:28:32 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 14 07:38:39 2021 +0000"
      },
      "message": "Reland \"Devirtualize to HInvokeStaticOrDirect.\"\n\nThis reverts commit 39d4df62d4e2606073d05cc363370db825ad7b9f.\n\nReason for revert: fix JIT-zygote issue.\n\nTest: JIT zygote boots.\n\nChange-Id: I895ad8e59e472fb662ca9bc5394c2fd9c6babc74\n"
    },
    {
      "commit": "39d4df62d4e2606073d05cc363370db825ad7b9f",
      "tree": "8e4cf0ac432406081d11e9102981446498b3265b",
      "parents": [
        "a28c827fdb58ec489931d6e70e27818619bc1b75"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 07 12:22:47 2021 +0000"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Fri May 07 14:41:25 2021 +0000"
      },
      "message": "Revert \"Devirtualize to HInvokeStaticOrDirect.\"\n\nThis reverts commit 5024ddfd125b5c3b59d7f359ae33cf7f0255b048.\n\nBug: 187408838\n\nReason for revert: b/187408838\n\nChange-Id: If74f5ddbacc73296f66c55762e2a8d1ec2cd1f19\n"
    },
    {
      "commit": "5024ddfd125b5c3b59d7f359ae33cf7f0255b048",
      "tree": "b625ed5aa1c4976e4cd2de5732543d5d1eb34a0f",
      "parents": [
        "5859b689d4fdd36711187715c04e2e095f7975c0"
      ],
      "author": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Wed Apr 28 14:42:09 2021 +0100"
      },
      "committer": {
        "name": "Nicolas Geoffray",
        "email": "ngeoffray@google.com",
        "time": "Thu May 06 10:37:17 2021 +0000"
      },
      "message": "Devirtualize to HInvokeStaticOrDirect.\n\nWhen we statically know the target method, devirtualize an\nHInvokeInterface or an HInvokeVirtual to a HInvokeStaticOrDirect.\n\nTest: test.py\nBug: 182538502\nChange-Id: Ie3a58603cde300fca9ca4972d4dfbbd20918f5ba\n"
    },
    {
      "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": "2731eb474f3f1b9c7598bd477ebbbb1aae28d833",
      "tree": "848224dec52ebec3dcdfbfeda9c756e5fb552603",
      "parents": [
        "14464670d7d6a226b768873f25d63f5d025941ff"
      ],
      "author": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Fri Jul 24 12:10:12 2020 +0100"
      },
      "committer": {
        "name": "Orion Hodson",
        "email": "oth@google.com",
        "time": "Sun Jul 26 21:08:18 2020 +0000"
      },
      "message": "More inclusive language fixes\n\nBug: 161896447\nBug: 161850439\nBug: 161336379\nTest: art/test.py --host\nChange-Id: I1519e22d40cb28f243dd75b12d455cfa844726fc\n"
    },
    {
      "commit": "b1f9c79c550e4d9d77d85ab723b642cd0eb7afad",
      "tree": "99e6c330f7b9c9c4e7c659788e4920ebdd96555a",
      "parents": [
        "b27d874ebc0c067d96994a6ebe3c10eaeb2e4a75"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Aug 03 11:10:49 2018 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Aug 03 11:11:52 2018 +0100"
      },
      "message": "Remove all multidex.jpp files.\n\nThese are unused since jack was removed from the tree.\n\nTest: Rely on TreeHugger\nChange-Id: Iaf16bc70ed943d46cd56a3140deb7508c8bf985f\n"
    },
    {
      "commit": "a9b131069c146df4ac58254b496443e20d5beace",
      "tree": "9e8b8aebe2e17d04c23054d5fb1c462046fa3a09",
      "parents": [
        "1e739fa94947147953c53e92964e0e9e1eac0526"
      ],
      "author": {
        "name": "Tamas Kenez",
        "email": "tamaskenez@google.com",
        "time": "Fri Jun 15 14:12:12 2018 +0200"
      },
      "committer": {
        "name": "Tamas Kenez",
        "email": "tamaskenez@google.com",
        "time": "Fri Jun 15 14:12:12 2018 +0200"
      },
      "message": "ART-tests: Remove DX dependency from 569-checker-pattern-replacement.\n\nTest has already been working with D8, this CL only enables it.\n\nTest: art/test.py -b -r --host -t 569-checker-pattern-replacement\nBug: 65168732\nChange-Id: If3496ff7a474adef319a3de89eb438f9b1c31676\n"
    },
    {
      "commit": "a1b1b1bd56c609cea90330dd39ba375f3ec081c7",
      "tree": "a9180710d5e6f035f0091304cc9db3817c36e46c",
      "parents": [
        "b7f680727032a6fa82f166c2c268db8eb0f3b570"
      ],
      "author": {
        "name": "Rico Wind",
        "email": "ricow@google.com",
        "time": "Tue May 01 15:50:27 2018 +0200"
      },
      "committer": {
        "name": "Rico Wind",
        "email": "ricow@google.com",
        "time": "Tue May 01 16:51:27 2018 +0000"
      },
      "message": "Add a few cases of non compatiple d8 tests\n\nUnblock rolling r8\nBug: b/65168732\nTest: Test still work with dx\nChange-Id: I54c805e205c550215a6dc3f05ec5f83a753c054b\n"
    },
    {
      "commit": "a308a327884920cbb1e3e62964c4b5a01c29af8c",
      "tree": "4bd09065c52f18685dc9e10d9eabdcdb29a51539",
      "parents": [
        "bacafb19fa654fb6c7ad610305bed45c2e4682e8"
      ],
      "author": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 18 16:51:51 2017 -0700"
      },
      "committer": {
        "name": "Calin Juravle",
        "email": "calin@google.com",
        "time": "Tue Jul 18 17:02:27 2017 -0700"
      },
      "message": "Change kMultiDexSeparator from \u0027:\u0027 to \u0027!\u0027\n\nThe \u0027:\u0027 separator is commonly used to separate class path elements. That\nmeans that we cannot easily encode multidex location in a classpath\nwithout complicating the parsing logic unnecessarily (e.g. when encoding\nclasspaths in the oat file).\n\nFor easy parsing and understanding kMultiDexSeparator and\nkClassPathSeparator should have different values. \u0027:\u0027 is a wide spread\nclasspath separator so this CL changes the value of kMultiDexSeparator to\n\u0027!\u0027 which is also commonly used to denote an object inside a given\ncontainer.\n\nTest: m test-art-host\nBug: 38138251\nChange-Id: I30995c553d9131478c6c071b27327df6d2de06a7\n"
    },
    {
      "commit": "79d8fa7c52c1810d4618c9bd1d43994be5abb53d",
      "tree": "411a76dec2adf4139328d5e607b498b72c9aa2af",
      "parents": [
        "acac09dad3d5aa3922e6cdf54ff2e4fa6f176484"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Tue Apr 18 09:37:23 2017 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Thu May 18 14:14:13 2017 +0000"
      },
      "message": "optimizing: Build HConstructorFence for HNewArray/HNewInstance nodes\n\nAlso fixes:\n* LSE, code_sinking to keep optimizing new-instance if it did so before\n* Various tests to expect constructor fences after new-instance\n\nSidenote: new-instance String does not get a ConstructorFence; the\nspecial StringFactory calls are assumed to be self-fencing.\n\nMetric changes on go/lem:\n* CodeSize -0.262% in ART-Compile (ARMv8)\n* RunTime -0.747% for all (linux-armv8)\n\n(No changes expected to x86, constructor fences are no-op).\n\nThe RunTime regression is temporary until art_quick_alloc_* entrypoints have their\nDMBs removed in a follow up CL.\n\nTest: art/test.py\nBug: 36656456\nChange-Id: I6a936a6e51c623e1c6b5b22eee5c3c72bebbed35\n"
    },
    {
      "commit": "d01745ef88bfd25df574a885d90a1a7785db5f5b",
      "tree": "058eb1593dbb0fe8a8e26b901909bec8aa01d474",
      "parents": [
        "a57c334075b193de9690fff97acf6c1b1d1283fc"
      ],
      "author": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Wed Apr 05 16:40:31 2017 -0700"
      },
      "committer": {
        "name": "Igor Murashkin",
        "email": "iam@google.com",
        "time": "Tue May 02 09:45:45 2017 -0700"
      },
      "message": "optimizing: constructor fence redundancy elimination - remove dmb after LSE\n\nPart one of a few upcoming CLs to optimize constructor fences.\n\nThis improves load-store-elimination; all singleton objects that are not\nreturned will have their associated constructor fence removed.\n\nIf the allocation is removed, so is the fence. Even if allocation is not\nremoved, fences can sometimes be removed.\n\nThis change is enabled by tracking the \"this\" object associated with the\nconstructor fence as an input. Fence inputs are considered weak; they do not keep\nthe \"this\" object alive; if the instructions for \"this\" are all deleted,\nthe fence can also be deleted.\n\nBug: 36656456\nTest: art/test.py --host \u0026\u0026 art/test.py --target\nChange-Id: I05659ab07e20d6e2ecd4be051b722726776f4ab1\n"
    },
    {
      "commit": "264e96c70ee588b16da570fec9403e21f1ab74fb",
      "tree": "e4cbc07b6d8e2bf11f294b5d4608b48ae7f0b53b",
      "parents": [
        "064e9d401c49d3789b5deeeb6b423a4f551e4206"
      ],
      "author": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Thu Mar 03 18:08:17 2016 +0100"
      },
      "committer": {
        "name": "Sebastien Hertz",
        "email": "shertz@google.com",
        "time": "Tue Mar 08 11:15:02 2016 +0100"
      },
      "message": "Support multidex run-test with Jack\n\nUpdates default-build script to compile multidex run-tests with\nJack. Such test needs a \u0027multidex.jpp\u0027 file specifying how to\npartition classes in the output dex files (mainly how to stick some\nclasses in the classes.dex file and others in a classes2.dex file).\n\nBug: 19467889\n\n(cherry picked from commit 4856ca7f652b889c176a2af747d5cc4b334fc1c6)\n\nChange-Id: I056d49d50f62f9fadbc6749fb4b185d5bb3dea12\n"
    },
    {
      "commit": "f8b3b8bc37fb04d8ae113ae6bfcf4de2f5a700d4",
      "tree": "cee02ae8f42e413e2d6af2140cd2f08e6ea34e6d",
      "parents": [
        "8b0e9b87ab6e54237b2d1e101b8cce7ea6443238"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Feb 04 19:46:56 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Feb 10 10:12:22 2016 +0000"
      },
      "message": "Try to substitute constructor chains for IPUTs.\n\nMatch a constructor chain where each constructor either\nforwards some or all of its arguments to the next (i.e.\nsuperclass constructor or a constructor in the same class)\nand may pass extra zeros (of any type, including null),\nfollowed by any number of IPUTs on \"this\", storing either\narguments or zeros, until we reach the contructor of\njava.lang.Object.\n\nWhen collecting IPUTs from the constructor chain, remove\nany IPUTs that store the same field as an IPUT that comes\nlater. This is safe in this case even if those IPUTs store\nvolatile fields because the uninitialized object reference\nwasn\u0027t allowed to escape yet. Also remove any IPUTs that\nstore zero values as the allocated object is already zero\ninitialized.\n\n(cherry picked from commit 354efa6cdf558b2331e8fec539893fa51763806e)\n\nChange-Id: I691e3b82e550e7a3272ce6a81647c7fcd02c01b1\n"
    },
    {
      "commit": "0d11ffe0d59170903695b94c9af8bbadad59ebfe",
      "tree": "cc120789d31f6ed08be24cedf17bcb9b55c4d134",
      "parents": [
        "f1e2b4dd9238d85d041f47b6bd853babe0a53c85"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Feb 02 11:10:16 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Feb 02 11:23:27 2016 +0000"
      },
      "message": "Optimizing: Do not depend on sharpening in test 569.\n\nThe sharpening may or may not remove the ArtMethod*\nparameter, so the test must not depend on its absence.\nThis fixes the test 569 checker test on mips/mips64.\n\nChange-Id: Ibee88d3602778006558caf33cf69e7c419918699\n"
    },
    {
      "commit": "be10e8e99a78caae01fb65769218800d465144ae",
      "tree": "cfa5cd3264137febdba6e49cae0393c779c6439c",
      "parents": [
        "fa72bf1823a39b43552fa1b9ae572023830a4ac1"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Jan 22 12:09:44 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jan 28 18:13:53 2016 +0000"
      },
      "message": "Optimizing: Try pattern substitution when we cannot inline.\n\nChange-Id: I7c01f4494bac8498accc0f087044ec509fee4c98\n"
    }
  ]
}
