)]}'
{
  "log": [
    {
      "commit": "762954836e5c15e85f0348dafcf50281b0149255",
      "tree": "24cfc7a8b812e24307b79e4e8b37569569a318dc",
      "parents": [
        "f579b063b848d04e42aa64774949bf0deb5aab0f"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 26 12:28:37 2020 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Oct 27 09:31:21 2020 +0000"
      },
      "message": "Revert^2 \"Improve mirror::String implementation.\"\n\nThis reverts commit 15efe16175115f29e7c99bfc2703c30a82e3f702.\n\nFixed copy-paste error in AllocFromStrings, added tests\nfor String.concat() to 021-strings2 as regression test.\n\nTest: m test-art-host-gtest\nTest: testrunner.py --host --optimizing\nBug: 169674485\nBug: 171273669\nChange-Id: I4b298020b7b31de84898243ad73db40a8ad7d69e\n"
    },
    {
      "commit": "cb64b85d581fc207688603fbca3770fb4bb0d008",
      "tree": "075468eb42783125937f0143e2a5eb7da0bfd8f0",
      "parents": [
        "201330ccfb11989f7449486865c6f74b54f1a914"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 28 10:54:48 2018 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 28 10:58:00 2018 +0000"
      },
      "message": "Remove bouncycastle dependency from 021-string2.\n\nThe part of the test 021-string2 using bouncycastle was\nadded with the String representation change,\n    https://android-review.googlesource.com/79174 ,\nbut the only thing it seems to be testing (with respect to\nthat CL) is the String(char[]) constructor. Therefore,\nchange the test to call that constructor directly.\n\nTest: testrunner.py --host -t 021-string2\nChange-Id: Ifbac88609ffc190d577d48880a451d2279c2a078\n"
    },
    {
      "commit": "984519c67073b304c0e8bde1728de89d6fef98c1",
      "tree": "c1efdab0c409d97b95002fe9a696a00e3c05cc1c",
      "parents": [
        "02cb397857c979dffae95e2db2678a72ec407cf0"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Aug 23 10:45:29 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Aug 29 10:28:30 2017 +0100"
      },
      "message": "ARM: Improve String.equals() intrinsic for const strings.\n\nAnd add tests for the relevant string lengths to 021-string2\nand remove obsolete inlining-prevention code from that test.\nAlso a minor fix of the cutoff check for arm64.\n\nThis is a follow-up to the ARM64 change\n    https://android-review.googlesource.com/336648 .\n\naosp_angler-userdebug:\n  before:\n    arm boot*.oat: 34153044\n    arm boot*.oat/no string compression: 34107776\n  after:\n    arm boot*.oat: 34132740 (−20304)\n    arm boot*.oat/no string compression: 34099508 (−8268)\n\nThe string compression code size difference drops from\n45268 to 33232.\n\nTest: m test-art-target on Nexus 6P\nTest: m test-art-target on Nexus 6P with string compression disabled.\nBug: 31040547\nChange-Id: I4ec73d444d9f56aaf8aa08369c830f398df2168a\n"
    },
    {
      "commit": "a44c44549c8688b0e7257571601625e9eb88cea8",
      "tree": "994f1496175b29559f2a06c1bc125d7af809300a",
      "parents": [
        "f6a122c2cdbd871c0073ee5f90449be4fad34dea"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 13 18:49:35 2017 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Jul 13 18:49:35 2017 +0100"
      },
      "message": "Fix compressible string check for ctors with `hibyte`.\n\nOnly the low 8 bits of the `hibyte` are relevant but we\nwere checking the whole `hibyte`, erroneously creating\nan uncompressed string when the low bits are zero but\nhigh bits are non-zero. String.equals() depends on all\ncompressible Strings being actually compressed.\n\nTest: Added regression test to 021-string2.\nTest: m test-art-host-gtest\nTest: testrunner.py --host\nBug: 31040547\nBug: 63661357\nChange-Id: I31690b544de928ce9c6f39f3d144d3e2029f38f6\n"
    },
    {
      "commit": "26ec3cad4968ae32ce9d04c3046f766df46d9bd7",
      "tree": "0ba845434b3b5679ee62b099c42ad455b4dcc37d",
      "parents": [
        "fbe1516b91f2117bb9c7282aaea5537572f62dd7"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 14 13:37:14 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Mar 14 14:02:46 2017 +0000"
      },
      "message": "ARM64: Fix lack of scratch registers in String.equals() intrinsic.\n\nTest: testrunner.py --target -t 021-string2 (on Nexus 6P)\nBug: 36127106\nChange-Id: I1e46af69a80b7025931be662cbafa10165f9c47e\n"
    },
    {
      "commit": "85bef97df9019dd4aa27e00437198952b41d2a62",
      "tree": "12563d16e25981191cb0c9f4db794031aa21e212",
      "parents": [
        "1fed1dc7b1ea75b0465c0b2b3457718aab5a0f34"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 17 10:18:57 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 17 10:27:34 2017 +0000"
      },
      "message": "Tests for String.setCharAt() breaking string compression.\n\nWith string compression, all compressible strings must be\ncompressed. The internal API String.setCharAt() can break\nthat invariant when overwriting a non-ASCII character with\nan ASCII character, turning an uncompressible string into\na compressible one. It can also truncate a non-ASCII\ncharacter written to a compressed string. These regression\ntests check the public API that exposes the problem.\nSubmitting these tests (without a fix) shall prevent us\nfrom enabling string compression before it\u0027s ready.\n\nTest: testrunner.py --host -t 021-string2\nTest: Manually check that new asserts fail with string compression.\nBug: 31040547\nChange-Id: I66f27a73f273f7648acbdf1b601345711f37c85e\n"
    },
    {
      "commit": "e39f14ff4e0d7c70016874cff24863b912d40bf1",
      "tree": "57588025e96e01ac2998cbdcf0ff12a822fdcd4e",
      "parents": [
        "4e4b62e21672dbacf5d5abb688a126aabad29269"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Feb 10 15:44:25 2017 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Feb 14 13:25:05 2017 +0000"
      },
      "message": "ARM64: Improve String.equals() intrinsic for const strings.\n\nAnd add additional tests to 021-string2.\n\naosp_angler-userdebug:\n  before:\n    arm64 boot*.oat: 43324664\n    arm64 boot*.oat/string compression: 43411112\n  after:\n    arm64 boot*.oat: 43300136 (-24528)\n    arm64 boot*.oat/string compression: 43345464 (-65648)\n\nThe string compression code size difference drops from\n86448 to 45328.\n\nTest: m test-art-target on Nexus 6P\nTest: m test-art-target on Nexus 6P with string compression enabled.\nBug: 31040547\nChange-Id: I99a3777b91b248da2b0ac25abd260f9e5abb2c09\n"
    },
    {
      "commit": "16850aecd661375533404099cbc679aba7377ba4",
      "tree": "5e0f77ed1955df91935837cd086c02360ad52bb6",
      "parents": [
        "fb678bfaad7f432861d26bde8343d53fadd68c07"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Fri Dec 09 14:01:02 2016 +0000"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Tue Dec 13 10:24:09 2016 +0000"
      },
      "message": "Fix string compression for embedded zero chars.\n\nTreat embedded zero character as non-ASCII.\n\nTest: m test-art-host\nTest: m test-art-host with string compression enabled.\nBug: 31040547\nChange-Id: Iea6e92f89d424953814953ba27f1c7a991589c65\n"
    },
    {
      "commit": "fdaf0f45510374d3a122fdc85d68793e2431175e",
      "tree": "3315c82410fd42612bb501bed150df454dde0dde",
      "parents": [
        "b02b8d7df48ea3314cfcb3c08d84ac9556363833"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Thu Oct 13 19:29:53 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Nov 09 11:08:31 2016 +0000"
      },
      "message": "Change string compression encoding.\n\nEncode the string compression flag as the least significant\nbit of the \"count\" field, with 0 meaning compressed and 1\nmeaning uncompressed.\n\nThe main vdex file is a tiny bit larger (+28B for prebuilt\nboot images, +32 for on-device built images) and the oat\nfile sizes change. Measured on Nexus 9, AOSP ToT, these\nchanges are insignificant when string compression is\ndisabled (-200B for the 32-bit boot*.oat for prebuilt boot\nimage, -4KiB when built on the device attributable to\nrounding, -16B for 64-bit boot*.oat for prebuilt boot image,\nno change when built on device) but with string compression\nenabled we get significant differences:\n  prebuilt multi-part boot image:\n    - 32-bit boot*.oat: -28KiB\n    - 64-bit boot*.oat: -24KiB\n  on-device built single boot image:\n    - 32-bit boot.oat: -32KiB\n    - 64-bit boot.oat: -28KiB\nThe boot image oat file overhead for string compression:\n  prebuilt multi-part boot image:\n    - 32-bit boot*.oat: before: ~80KiB after: ~52KiB\n    - 64-bit boot*.oat: before: ~116KiB after: ~92KiB\n  on-device built single boot image:\n    - 32-bit boot.oat: before: 92KiB after: 60KiB\n    - 64-bit boot.oat: before: 116KiB after: 92KiB\n\nThe differences in the SplitStringBenchmark seem to be lost\nin the noise.\n\nTest: Run ART test suite on host and Nexus 9 with Optimizing.\nTest: Run ART test suite on host and Nexus 9 with interpreter.\nTest: All of the above with string compression enabled.\nBug: 31040547\n\nChange-Id: I7570c2b700f1a31004a2d3c18b1cc30046d35a74\n"
    },
    {
      "commit": "9c9883bb03de05783d3e24dfc00dee4d03786fe3",
      "tree": "d765d341d46ad88c9bb8effdcfad9493dc9adb27",
      "parents": [
        "fc7798ba8201ae44c5c11384232be7c51afd3727"
      ],
      "author": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Mon Oct 17 14:45:29 2016 +0100"
      },
      "committer": {
        "name": "Vladimir Marko",
        "email": "vmarko@google.com",
        "time": "Wed Oct 19 10:47:51 2016 +0100"
      },
      "message": "Fix string compression, add tests.\n\nFix String.compareTo() for interpreter; memcmp() does not\nreturn the required result (only the right sign).\nFix x86-64 stub where the assembler silently accepted and\ngenerated bad code for out-of-range JECXZ.\nAdd extensive tests for String.equals(), String.compareTo()\nand String.indexOf().\n\nBug: 31040547\nTest: Run ART test suite including interpreter tests on host and Nexus 9.\nTest: Ditto with string compression enabled.\nChange-Id: I21b7a74da8a577c8fbaf8d9225f048550236d414\n"
    },
    {
      "commit": "166aaee6aa39c20c87113b3fcf0dcd81e0a934cb",
      "tree": "70ab523f146d164ece8a0e94dbc499783005e3dc",
      "parents": [
        "115c1de1f812d380449ef89cfe50cc4fb4289275"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon Jul 18 08:27:23 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Jul 22 20:37:07 2016 -0700"
      },
      "message": "ART: Fix type parameter in tests\n\nMove Class to Class\u003c?\u003e, Constructor to Constructor\u003c?\u003e, and in\ngeneral clean up reflection.\n\nTest: m test-art-host-run-test\nChange-Id: I3a4223ee8d14d032015edf34bf27135757f7138c\n"
    },
    {
      "commit": "848f70a3d73833fc1bf3032a9ff6812e429661d9",
      "tree": "b0349b3a40aab5a915af491b100659a5ca9fbbf6",
      "parents": [
        "d14438f0c5071962be7fab572b54687d32d9d087"
      ],
      "author": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Wed Jan 15 13:49:50 2014 -0800"
      },
      "committer": {
        "name": "Jeff Hao",
        "email": "jeffhao@google.com",
        "time": "Mon Apr 27 18:54:52 2015 -0700"
      },
      "message": "Replace String CharArray with internal uint16_t array.\n\nSummary of high level changes:\n  - Adds compiler inliner support to identify string init methods\n  - Adds compiler support (quick \u0026 optimizing) with new invoke code path\n    that calls method off the thread pointer\n  - Adds thread entrypoints for all string init methods\n  - Adds map to verifier to log when receiver of string init has been\n    copied to other registers. used by compiler and interpreter\n\nChange-Id: I797b992a8feb566f9ad73060011ab6f51eb7ce01\n"
    },
    {
      "commit": "4554bfdc2859712a763a12e35a4176914fc7c994",
      "tree": "6ec9fde68d61fbf5e33955a54755d3e346b38bb5",
      "parents": [
        "ef2cc5a9c6e508a3e8b24d04ca35f7422f27e112"
      ],
      "author": {
        "name": "Alexei Zavjalov",
        "email": "alexei.zavjalov@intel.com",
        "time": "Wed Feb 26 17:28:35 2014 +0700"
      },
      "committer": {
        "name": "Alexei Zavjalov",
        "email": "alexei.zavjalov@intel.com",
        "time": "Thu Feb 27 00:01:00 2014 +0700"
      },
      "message": "Incorrect result of compareTo between empty and non-empty strings\n\nCurrent implementation of the Strings.compareTo() handles the case when\nempty string compares to non-empty string in the wrong way.\n\nThis patch adds handler for such cases.\n\nChange-Id: I35cc2cfd5141551d6da65748c44b59e64a3f8117\nSigned-off-by: Alexei Zavjalov \u003calexei.zavjalov@intel.com\u003e\n"
    },
    {
      "commit": "5d1ac920fdaef5d4ec8f66bb734488cd9660b024",
      "tree": "dd372f306ab70f4c86759869b1f74eca62ff6f2b",
      "parents": [
        "c31664f3d82e6cd68275a529a8a73f067a52e8be"
      ],
      "author": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Thu Sep 29 17:41:15 2011 -0700"
      },
      "committer": {
        "name": "jeffhao",
        "email": "jeffhao@google.com",
        "time": "Thu Sep 29 17:41:15 2011 -0700"
      },
      "message": "Adding old unit tests to test suite.\n\nThese tests are copied straight over. They\u0027ll still run, but they\u0027re\nusing the old system.\n\nChange-Id: If494519e52ddf858a9febfc55bdae830468cb3c8\n"
    }
  ]
}
