)]}'
{
  "commit": "5d356b9d1c22e345c2ea08432302e82fd02d8a61",
  "tree": "aaac8d5f4e3398c9ed817adfc97baa203c3d2817",
  "parents": [
    "1976b9edadc994262a35b3e30a378efeb07e44ac"
  ],
  "author": {
    "name": "notcarl",
    "email": "notcarl@google.com",
    "time": "Fri Oct 07 18:05:21 2016 +0000"
  },
  "committer": {
    "name": "Joe Tsai",
    "email": "joetsai@digital-static.net",
    "time": "Wed Oct 12 12:54:56 2016 -0700"
  },
  "message": "Unroll DecodeVarint to speed up int32/int64/uint64 slice decoding.\n\nThere are two variations here, one is using goto (called cpp) and one using if-else (called java).  The cpp is much faster than the original, and slightly faster than java:\n\nOriginal vs. Cpp variant:\nname                            old time/op  new time/op  delta\nVarint32ArraySmall/Len8-12       282ns ± 3%   280ns ± 1%   -0.78%  (p\u003d0.005 n\u003d17+16)\nVarint32ArraySmall/Len16-12      370ns ± 2%   370ns ± 5%   +0.04%  (p\u003d0.038 n\u003d18+19)\nVarint32ArraySmall/Len32-12      535ns ± 7%   516ns ± 5%   -3.47%  (p\u003d0.000 n\u003d20+20)\nVarint32ArraySmall/Len64-12      801ns ± 2%   763ns ± 3%   -4.81%  (p\u003d0.000 n\u003d16+19)\nVarint32ArraySmall/Len128-12    1.31µs ± 1%  1.25µs ± 2%   -4.75%  (p\u003d0.000 n\u003d16+19)\nVarint32ArraySmall/Len256-12    2.29µs ± 0%  2.19µs ± 4%   -4.70%  (p\u003d0.000 n\u003d16+20)\nVarint32ArraySmall/Len512-12    4.30µs ± 9%  3.94µs ± 3%   -8.46%  (p\u003d0.000 n\u003d20+20)\nVarint32ArraySmall/Len1024-12   7.99µs ± 1%  7.41µs ± 2%   -7.23%  (p\u003d0.000 n\u003d17+19)\nVarint32ArraySmall/Len2048-12   18.2µs ± 3%  16.9µs ± 2%   -7.13%  (p\u003d0.000 n\u003d20+19)\nVarint32ArraySmall/Len4096-12   35.2µs ± 4%  32.4µs ± 0%   -7.88%  (p\u003d0.000 n\u003d20+17)\nVarint32ArrayLarge/Len34-12      769ns ± 7%   651ns ± 1%  -15.31%  (p\u003d0.000 n\u003d20+17)\nVarint32ArrayLarge/Len68-12     1.23µs ± 2%  1.03µs ± 3%  -16.43%  (p\u003d0.000 n\u003d17+17)\nVarint32ArrayLarge/Len136-12    2.18µs ± 4%  1.76µs ± 2%  -19.10%  (p\u003d0.000 n\u003d20+19)\nVarint32ArrayLarge/Len272-12    4.03µs ±11%  3.19µs ± 4%  -20.68%  (p\u003d0.000 n\u003d20+20)\nVarint32ArrayLarge/Len544-12    7.37µs ± 5%  5.81µs ± 0%  -21.22%  (p\u003d0.000 n\u003d18+16)\nVarint32ArrayLarge/Len1088-12   13.5µs ± 4%  10.6µs ± 0%  -21.53%  (p\u003d0.000 n\u003d20+17)\nVarint32ArrayLarge/Len2176-12   26.5µs ± 1%  21.0µs ± 2%  -20.74%  (p\u003d0.000 n\u003d16+17)\nVarint32ArrayLarge/Len4352-12   56.7µs ± 5%  45.1µs ± 3%  -20.35%  (p\u003d0.000 n\u003d20+20)\nVarint32ArrayLarge/Len8704-12    109µs ± 3%    88µs ± 6%  -19.75%  (p\u003d0.000 n\u003d20+20)\nVarint32ArrayLarge/Len17408-12   209µs ± 0%   165µs ± 0%  -21.17%  (p\u003d0.000 n\u003d16+17)\nVarint64ArraySmall/Len8-12       303ns ± 1%   304ns ± 2%     ~     (p\u003d0.205 n\u003d16+17)\nVarint64ArraySmall/Len16-12      412ns ± 5%   414ns ±13%     ~     (p\u003d0.236 n\u003d20+19)\nVarint64ArraySmall/Len32-12      593ns ± 7%   568ns ± 3%   -4.15%  (p\u003d0.000 n\u003d19+17)\nVarint64ArraySmall/Len64-12      921ns ± 3%   874ns ± 3%   -5.10%  (p\u003d0.000 n\u003d20+20)\nVarint64ArraySmall/Len128-12    1.54µs ± 0%  1.48µs ± 2%   -3.76%  (p\u003d0.000 n\u003d20+20)\nVarint64ArraySmall/Len256-12    2.74µs ± 4%  2.61µs ± 3%   -4.87%  (p\u003d0.000 n\u003d17+20)\nVarint64ArraySmall/Len512-12    5.05µs ± 0%  4.76µs ± 2%   -5.67%  (p\u003d0.000 n\u003d18+19)\nVarint64ArraySmall/Len1024-12   9.59µs ± 0%  9.07µs ± 3%   -5.39%  (p\u003d0.000 n\u003d17+19)\nVarint64ArraySmall/Len2048-12   23.7µs ± 3%  22.3µs ± 2%   -6.06%  (p\u003d0.000 n\u003d20+18)\nVarint64ArraySmall/Len4096-12   46.9µs ± 1%  45.0µs ± 1%   -3.96%  (p\u003d0.000 n\u003d17+18)\nVarint64ArrayLarge/Len164-12    3.48µs ± 4%  2.71µs ± 3%  -22.02%  (p\u003d0.000 n\u003d19+20)\nVarint64ArrayLarge/Len328-12    6.59µs ± 4%  4.97µs ± 0%  -24.56%  (p\u003d0.000 n\u003d20+17)\nVarint64ArrayLarge/Len656-12    12.4µs ± 1%   9.4µs ± 1%  -24.44%  (p\u003d0.000 n\u003d18+17)\nVarint64ArrayLarge/Len1312-12   23.3µs ± 5%  17.3µs ± 3%  -25.85%  (p\u003d0.000 n\u003d19+20)\nVarint64ArrayLarge/Len2624-12   51.9µs ± 5%  39.3µs ± 0%  -24.40%  (p\u003d0.000 n\u003d19+16)\nVarint64ArrayLarge/Len5248-12    109µs ± 0%    85µs ± 2%  -22.00%  (p\u003d0.000 n\u003d20+19)\nVarint64ArrayLarge/Len10496-12   208µs ± 4%   157µs ± 1%  -24.36%  (p\u003d0.000 n\u003d20+18)\nVarint64ArrayLarge/Len20992-12   434µs ± 6%   331µs ± 1%  -23.68%  (p\u003d0.000 n\u003d20+19)\nVarint64ArrayLarge/Len41984-12   854µs ± 5%   665µs ± 1%  -22.11%  (p\u003d0.000 n\u003d20+19)\nVarint64ArrayLarge/Len83968-12  1.74ms ± 2%  1.38ms ± 2%  -20.49%  (p\u003d0.000 n\u003d19+19)\nDecodeEmpty-12                   212ns ± 5%   202ns ± 1%   -5.01%  (p\u003d0.000 n\u003d20+16)\n\nJava vs Cpp Variant:\nname                            old time/op  new time/op  delta\nVarint32ArraySmall/Len8-12       284ns ± 3%   280ns ± 1%  -1.46%  (p\u003d0.000 n\u003d17+16)\nVarint32ArraySmall/Len16-12      370ns ± 0%   370ns ± 5%  -0.09%  (p\u003d0.046 n\u003d16+19)\nVarint32ArraySmall/Len32-12      514ns ± 0%   516ns ± 5%    ~     (p\u003d0.147 n\u003d19+20)\nVarint32ArraySmall/Len64-12      782ns ± 2%   763ns ± 3%  -2.46%  (p\u003d0.000 n\u003d18+19)\nVarint32ArraySmall/Len128-12    1.29µs ± 5%  1.25µs ± 2%  -3.56%  (p\u003d0.000 n\u003d20+19)\nVarint32ArraySmall/Len256-12    2.21µs ± 1%  2.19µs ± 4%  -0.87%  (p\u003d0.021 n\u003d17+20)\nVarint32ArraySmall/Len512-12    4.01µs ± 2%  3.94µs ± 3%  -1.79%  (p\u003d0.000 n\u003d17+20)\nVarint32ArraySmall/Len1024-12   7.55µs ± 0%  7.41µs ± 2%  -1.82%  (p\u003d0.000 n\u003d16+19)\nVarint32ArraySmall/Len2048-12   17.0µs ± 0%  16.9µs ± 2%  -0.75%  (p\u003d0.027 n\u003d19+19)\nVarint32ArraySmall/Len4096-12   33.1µs ± 2%  32.4µs ± 0%  -1.88%  (p\u003d0.000 n\u003d17+17)\nVarint32ArrayLarge/Len34-12      673ns ± 1%   651ns ± 1%  -3.21%  (p\u003d0.000 n\u003d17+17)\nVarint32ArrayLarge/Len68-12     1.08µs ± 1%  1.03µs ± 3%  -4.82%  (p\u003d0.000 n\u003d19+17)\nVarint32ArrayLarge/Len136-12    1.83µs ± 1%  1.76µs ± 2%  -3.65%  (p\u003d0.000 n\u003d17+19)\nVarint32ArrayLarge/Len272-12    3.27µs ± 1%  3.19µs ± 4%  -2.34%  (p\u003d0.000 n\u003d17+20)\nVarint32ArrayLarge/Len544-12    6.04µs ± 1%  5.81µs ± 0%  -3.86%  (p\u003d0.000 n\u003d16+16)\nVarint32ArrayLarge/Len1088-12   11.0µs ± 0%  10.6µs ± 0%  -3.78%  (p\u003d0.000 n\u003d16+17)\nVarint32ArrayLarge/Len2176-12   21.7µs ± 1%  21.0µs ± 2%  -3.28%  (p\u003d0.000 n\u003d17+17)\nVarint32ArrayLarge/Len4352-12   46.2µs ± 0%  45.1µs ± 3%  -2.24%  (p\u003d0.000 n\u003d20+20)\nVarint32ArrayLarge/Len8704-12   90.7µs ± 8%  87.8µs ± 6%  -3.16%  (p\u003d0.000 n\u003d19+20)\nVarint32ArrayLarge/Len17408-12   171µs ± 1%   165µs ± 0%  -3.72%  (p\u003d0.000 n\u003d16+17)\nVarint64ArraySmall/Len8-12       309ns ± 5%   304ns ± 2%  -1.61%  (p\u003d0.000 n\u003d18+17)\nVarint64ArraySmall/Len16-12      403ns ± 1%   414ns ±13%    ~     (p\u003d0.774 n\u003d20+19)\nVarint64ArraySmall/Len32-12      569ns ± 0%   568ns ± 3%  -0.18%  (p\u003d0.012 n\u003d17+17)\nVarint64ArraySmall/Len64-12      898ns ± 0%   874ns ± 3%  -2.64%  (p\u003d0.000 n\u003d17+20)\nVarint64ArraySmall/Len128-12    1.52µs ± 1%  1.48µs ± 2%  -2.07%  (p\u003d0.000 n\u003d16+20)\nVarint64ArraySmall/Len256-12    2.65µs ± 0%  2.61µs ± 3%  -1.48%  (p\u003d0.000 n\u003d20+20)\nVarint64ArraySmall/Len512-12    4.86µs ± 1%  4.76µs ± 2%  -2.03%  (p\u003d0.000 n\u003d16+19)\nVarint64ArraySmall/Len1024-12   9.16µs ± 2%  9.07µs ± 3%  -0.97%  (p\u003d0.001 n\u003d17+19)\nVarint64ArraySmall/Len2048-12   22.7µs ± 2%  22.3µs ± 2%  -1.89%  (p\u003d0.000 n\u003d20+18)\nVarint64ArraySmall/Len4096-12   45.4µs ± 1%  45.0µs ± 1%  -0.84%  (p\u003d0.000 n\u003d19+18)\nVarint64ArrayLarge/Len164-12    2.84µs ± 1%  2.71µs ± 3%  -4.39%  (p\u003d0.000 n\u003d16+20)\nVarint64ArrayLarge/Len328-12    5.26µs ± 1%  4.97µs ± 0%  -5.36%  (p\u003d0.000 n\u003d20+17)\nVarint64ArrayLarge/Len656-12    10.0µs ± 1%   9.4µs ± 1%  -6.03%  (p\u003d0.000 n\u003d17+17)\nVarint64ArrayLarge/Len1312-12   18.1µs ± 1%  17.3µs ± 3%  -4.61%  (p\u003d0.000 n\u003d16+20)\nVarint64ArrayLarge/Len2624-12   41.3µs ± 0%  39.3µs ± 0%  -4.92%  (p\u003d0.000 n\u003d17+16)\nVarint64ArrayLarge/Len5248-12   88.6µs ± 2%  84.8µs ± 2%  -4.33%  (p\u003d0.000 n\u003d18+19)\nVarint64ArrayLarge/Len10496-12   165µs ± 1%   157µs ± 1%  -4.41%  (p\u003d0.000 n\u003d20+18)\nVarint64ArrayLarge/Len20992-12   341µs ± 2%   331µs ± 1%  -3.00%  (p\u003d0.000 n\u003d19+19)\nVarint64ArrayLarge/Len41984-12   696µs ± 1%   665µs ± 1%  -4.46%  (p\u003d0.000 n\u003d19+19)\nVarint64ArrayLarge/Len83968-12  1.43ms ± 1%  1.38ms ± 2%  -3.38%  (p\u003d0.000 n\u003d17+19)\nDecodeEmpty-12                   205ns ± 3%   202ns ± 1%  -1.45%  (p\u003d0.000 n\u003d17+16)\n\nBoth were run with 20 iterations on the decoding benchmark, on a mostly quiet machine with cpu frequency scaling disabled.\nPiperOrigin-RevId: 135494672\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "a54a8ccf7ab5a4791fdebb2d61bcbfea89d28352",
      "old_mode": 33188,
      "old_path": "proto/decode.go",
      "new_id": "aa207298f997665117f3ba88e65646f95c83f08a",
      "new_mode": 33188,
      "new_path": "proto/decode.go"
    }
  ]
}
