)]}'
{
  "commit": "92907f3f7af106a9eeb341caba17f3770203f7fb",
  "tree": "c44f6b487c9ad078c044f19a4a6d72eaf4979d11",
  "parents": [
    "1b7ba9e15d9525eec7ea68e9ecf95e5777a46069"
  ],
  "author": {
    "name": "Vladimir Marko",
    "email": "vmarko@google.com",
    "time": "Mon Feb 20 14:08:30 2017 +0000"
  },
  "committer": {
    "name": "Vladimir Marko",
    "email": "vmarko@google.com",
    "time": "Tue Feb 21 12:31:52 2017 +0000"
  },
  "message": "Remove String.setCharAt().\n\nThe internal API String.setCharAt() breaks the assumption\nthat strings are really immutable. That in turn breaks\nstring compression invariants - compressible strings must\nbe compressed. This CL removes the String.setCharAt() API.\n\nThe method was used only in String.replace(char, char)\nwhen we found a match, copying the string on first match.\nInstead, introduce a new native method that does the whole\nreplacement with a single call when we find the first match.\n\nStringReplaceBenchmark results on Nexus 6P, lower is better:\n  timeReplaceCharNonExistent/EMPTY   41.93 -\u003e   38.25 (-9%)\n  timeReplaceCharNonExistent/L_16   114.90 -\u003e   95.09 (-17%)\n  timeReplaceCharNonExistent/L_64   419.97 -\u003e  320.65 (-24%)\n  timeReplaceCharNonExistent/L_256 1667.01 -\u003e 1091.25 (-35%)\n  timeReplaceCharNonExistent/L_512 3253.50 -\u003e 2075.62 (-36%)\n  timeReplaceCharRepeated/EMPTY      41.93 -\u003e   39.58 (-6%)\n  timeReplaceCharRepeated/L_16      114.87 -\u003e   95.40 (-17%)\n  timeReplaceCharRepeated/L_64     1267.29 -\u003e  704.32 (-44%)\n  timeReplaceCharRepeated/L_256    5139.14 -\u003e 1361.80 (-74%)\n  timeReplaceCharRepeated/L_512   10787.81 -\u003e 2338.41 (-78%)\n  timeReplaceSingleChar/EMPTY        41.78 -\u003e   37.16 (-11%)\n  timeReplaceSingleChar/L_16        449.54 -\u003e  497.51 (+11%)\n  timeReplaceSingleChar/L_64        942.08 -\u003e  891.35 (-5%)\n  timeReplaceSingleChar/L_256      2756.18 -\u003e 2174.64 (-21%)\n  timeReplaceSingleChar/L_512      5489.91 -\u003e 3983.32 (-27%)\n\nTest: testrunner.py --host\nTest: run-libcore-tests.sh --mode\u003dhost\nTest: testrunner.py --host with string compression enabled.\nTest: run-libcore-tests.sh --mode\u003dhost with string compression enabled.\nBug: 31040547\nChange-Id: I9cf0d5457182f0a33ca8251c29931d3eb624ae07\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "af0478c1eb8869a322a6f68426669d5c88eb0d29",
      "old_mode": 33188,
      "old_path": "runtime/interpreter/unstarted_runtime.cc",
      "new_id": "80554c240d8bf9e1d8b6859f3478dede26f32915",
      "new_mode": 33188,
      "new_path": "runtime/interpreter/unstarted_runtime.cc"
    },
    {
      "type": "modify",
      "old_id": "6fc7989acf73037412e02db1598e6a8341b87250",
      "old_mode": 33188,
      "old_path": "runtime/interpreter/unstarted_runtime_list.h",
      "new_id": "e9435e466bd48abceec2b985f476c4cf4feb56d4",
      "new_mode": 33188,
      "new_path": "runtime/interpreter/unstarted_runtime_list.h"
    },
    {
      "type": "modify",
      "old_id": "c2407d7772019af1ed3cfed971b175e0035b1804",
      "old_mode": 33188,
      "old_path": "runtime/mirror/string-inl.h",
      "new_id": "57b20a193b029c60a87a0862fe2a8f70645eb22a",
      "new_mode": 33188,
      "new_path": "runtime/mirror/string-inl.h"
    },
    {
      "type": "modify",
      "old_id": "0ab0bd67942bbc685cad8fc58f9e3c40ee679c84",
      "old_mode": 33188,
      "old_path": "runtime/mirror/string.cc",
      "new_id": "884b88a6c1d62dffae19940de5f4146cde4903a9",
      "new_mode": 33188,
      "new_path": "runtime/mirror/string.cc"
    },
    {
      "type": "modify",
      "old_id": "38f6dd4b6fd8d0ca0859887af336b573bbd4cdaf",
      "old_mode": 33188,
      "old_path": "runtime/mirror/string.h",
      "new_id": "35ce98efadf94d76df22b6cdab9ad7ccae934583",
      "new_mode": 33188,
      "new_path": "runtime/mirror/string.h"
    },
    {
      "type": "modify",
      "old_id": "f1d6ff5f70009c35377d50711ff226f88d785d14",
      "old_mode": 33188,
      "old_path": "runtime/native/java_lang_String.cc",
      "new_id": "13573384647a540937292f9a4521e2f62996b7ee",
      "new_mode": 33188,
      "new_path": "runtime/native/java_lang_String.cc"
    },
    {
      "type": "modify",
      "old_id": "dd89d644a85f2f93256c4a1d23daf7b80686b3b8",
      "old_mode": 33188,
      "old_path": "test/100-reflect2/expected.txt",
      "new_id": "e2a1001e5b398c614f8288fae84efb016e7b310c",
      "new_mode": 33188,
      "new_path": "test/100-reflect2/expected.txt"
    }
  ]
}
