)]}'
{
  "log": [
    {
      "commit": "cd5d95a43a6e21273425c7ae415d3df9ea832eeb",
      "tree": "8c997bcba93dc06939deaf64c87ac6041c9d4dd0",
      "parents": [
        "112230192c580c3556b8cee6403af37a4fc5f28c"
      ],
      "author": {
        "name": "Eric Rutherford",
        "email": "erutherford@gmail.com",
        "time": "Fri Aug 30 18:09:31 2019 -0500"
      },
      "committer": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Wed Sep 11 18:51:00 2019 +0000"
      },
      "message": "syncmap: use type alias for Map\n\nsync.Map was introduced in Go 1.9, this change updates the syncmap package to use a type alias\nto sync.Map for 1.9 and later. It also updates the comments to reflect this change.\n\nFixes golang/go#33867\n\nChange-Id: Ia58ad2bc409f8fcb8a7539ef165148315da5cfb1\nReviewed-on: https://go-review.googlesource.com/c/sync/+/192737\nReviewed-by: Bryan C. Mills \u003cbcmills@google.com\u003e\nRun-TryBot: Bryan C. Mills \u003cbcmills@google.com\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "112230192c580c3556b8cee6403af37a4fc5f28c",
      "tree": "ec228883925e61255191c53ce6d4a7f543800a7e",
      "parents": [
        "56d357773e8497dfd526f0727e187720d1093757"
      ],
      "author": {
        "name": "Jean de Klerk",
        "email": "deklerk@google.com",
        "time": "Mon Apr 22 16:11:18 2019 -0600"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@golang.org",
        "time": "Tue Apr 23 02:48:10 2019 +0000"
      },
      "message": "semaphore: better error message when releasing more than held\n\nChange-Id: Ibe69007b2d7565a33d9e64ae51142478f495509a\nReviewed-on: https://go-review.googlesource.com/c/sync/+/173377\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nReviewed-by: Jonathan Amsterdam \u003cjba@google.com\u003e\nRun-TryBot: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "56d357773e8497dfd526f0727e187720d1093757",
      "tree": "06fcca271037d34aa2338d69647c8dd2c233e20e",
      "parents": [
        "e225da77a7e68af35c70ccbf71af2b83e6acac3c"
      ],
      "author": {
        "name": "LE Manh Cuong",
        "email": "cuong.manhle.vn@gmail.com",
        "time": "Fri Apr 12 11:58:03 2019 +0700"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@golang.org",
        "time": "Fri Apr 12 18:36:30 2019 +0000"
      },
      "message": "singleflight: fix duplicate deleting key when Forget called\n\nWhen Forget was called, we delete key associated with current call from\nmap. When that call is done, it does delete key again, causing the same\nkey set by other call after Forget lost.\n\nTo fix it, adding a boolean value to check whether the call is forgotten,\nthe call only does delete key if Forget is not called.\n\nFixes golang/go#31420\n\nChange-Id: I9708352ca3ff76c77f659916b37a496fdeb480d2\nReviewed-on: https://go-review.googlesource.com/c/sync/+/171897\nRun-TryBot: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\n"
    },
    {
      "commit": "e225da77a7e68af35c70ccbf71af2b83e6acac3c",
      "tree": "e4729578d805ff41e52a646fb99c7cd95e2cefb2",
      "parents": [
        "37e7f081c4d4c64e13b10787722085407fe5d15f"
      ],
      "author": {
        "name": "Michael Matloob",
        "email": "matloob@golang.org",
        "time": "Fri Feb 15 17:36:53 2019 -0500"
      },
      "committer": {
        "name": "Michael Matloob",
        "email": "matloob@golang.org",
        "time": "Wed Feb 27 15:59:43 2019 +0000"
      },
      "message": "all: add a go.mod file\n\nThis change adds a go.mod file to this repo, following the\nrequirements stated in bcmills\u0027s comment here:\nhttps://golang.org/issue/28136#issuecomment-462971974. It\u0027s\nimportant to note that we will not be\nadding versions to the repo for now.\n\nThis change does not add a go.sum because this repo has no dependencies.\n\nThe change was generated by running \"go mod init\" and \"go mod tidy\" using Go\n1.11.5 in the top-level directory of the repository.\n\nUpdates golang/go#28136\n\nChange-Id: Ie4f1270a0dfefd4239badf86daa0d7a5b17fd0d5\nReviewed-on: https://go-review.googlesource.com/c/162823\nRun-TryBot: Michael Matloob \u003cmatloob@golang.org\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\nReviewed-by: Dmitri Shuralyov \u003cdmitshur@golang.org\u003e\nReviewed-by: Jonathan Amsterdam \u003cjba@google.com\u003e\nReviewed-by: Bryan C. Mills \u003cbcmills@google.com\u003e\n"
    },
    {
      "commit": "37e7f081c4d4c64e13b10787722085407fe5d15f",
      "tree": "e31c725c8b45e0a16146035be5838dee2acf9dd7",
      "parents": [
        "42b317875d0fa942474b76e1b46a6060d720ae6e"
      ],
      "author": {
        "name": "Jean de Klerk",
        "email": "deklerk@google.com",
        "time": "Mon Sep 24 11:15:43 2018 -0700"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@golang.org",
        "time": "Fri Dec 21 19:32:16 2018 +0000"
      },
      "message": "semaphore: add more Acquire documentation\n\nChange-Id: Ie64db438145a307ec8aef8fd412d445a2fe74d40\nReviewed-on: https://go-review.googlesource.com/c/136995\nReviewed-by: Jonathan Amsterdam \u003cjba@google.com\u003e\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\n"
    },
    {
      "commit": "42b317875d0fa942474b76e1b46a6060d720ae6e",
      "tree": "0a707334e7c2b1fd06764301493a3d2a17f0097f",
      "parents": [
        "1d60e4601c6fd243af51cc01ddf169918a5407ca"
      ],
      "author": {
        "name": "Jean de Klerk",
        "email": "deklerk@google.com",
        "time": "Wed Nov 07 16:20:06 2018 -0800"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@golang.org",
        "time": "Thu Nov 08 01:04:31 2018 +0000"
      },
      "message": "all: remove x/net/context in favour of context\n\nChange-Id: Idbfe40e7cb9f99ca3dc7d4c214de6b9e028eefb7\nReviewed-on: https://go-review.googlesource.com/c/148277\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nRun-TryBot: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "1d60e4601c6fd243af51cc01ddf169918a5407ca",
      "tree": "60632ff83cf1e2c137e36c8f4a0581f2cfeb13e4",
      "parents": [
        "fd80eb99c8f653c847d294a001bdf2a3a6f768f5"
      ],
      "author": {
        "name": "Andrew Bonventre",
        "email": "andybons@golang.org",
        "time": "Wed Mar 14 13:21:19 2018 -0400"
      },
      "committer": {
        "name": "Andrew Bonventre",
        "email": "andybons@golang.org",
        "time": "Wed Mar 14 18:01:46 2018 +0000"
      },
      "message": "CONTRIBUTING.md: remove note about not accepting Pull Requests\n\nUpdates golang/go#24185\n\nChange-Id: I892f30f02f9ae40554790e9c177cb79d193bffd5\nReviewed-on: https://go-review.googlesource.com/100696\nReviewed-by: Andrew Bonventre \u003candybons@golang.org\u003e\nReviewed-by: Ian Lance Taylor \u003ciant@golang.org\u003e\n"
    },
    {
      "commit": "fd80eb99c8f653c847d294a001bdf2a3a6f768f5",
      "tree": "c8c31ae6a61f1327cdaa14f00685fb9708454466",
      "parents": [
        "8e0aa688b654ef28caa72506fa5ec8dba9fc7690"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Wed Nov 01 15:49:15 2017 -0400"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Wed Nov 01 21:47:15 2017 +0000"
      },
      "message": "semaphore: add worker-pool example\n\nI\u0027ve commented several times in various forums that basically every\ntime I\u0027ve seen the “worker goroutine” pattern in Go, there has turned\nout to be a cleaner implementation using semaphores.\n\nThis change adds a simple such example. (For more complex usage, I\nwould generally pair the semaphore with an errgroup.Group.)\n\nChange-Id: Ibf69ee761d14ba59c1acc6a2d595b4fcf0d8f6d6\nReviewed-on: https://go-review.googlesource.com/75170\nReviewed-by: Ross Light \u003clight@google.com\u003e\n"
    },
    {
      "commit": "8e0aa688b654ef28caa72506fa5ec8dba9fc7690",
      "tree": "008050dfa1ddbc32e6a0709da03fb9ca8686e2d2",
      "parents": [
        "f52d1811a62927559de87708c8913c1650ce4f26"
      ],
      "author": {
        "name": "Kevin Burke",
        "email": "kev@inburke.com",
        "time": "Tue Jul 18 20:38:01 2017 -0700"
      },
      "committer": {
        "name": "Kevin Burke",
        "email": "kev@inburke.com",
        "time": "Wed Sep 27 05:41:12 2017 +0000"
      },
      "message": "README: switch to Markdown, add better links\n\nMove the README to README.md so Gerrit can render it; currently\nGerrit only renders files named exactly \"README.md\" (for example at\nhttps://go.googlesource.com/go).\n\nAdd more links to the README explaining how to file issues,\nhow to submit code changes, where to download the code to and\nhow to get it. Hopefully this should help people who go to\nhttps://go.googlesource.com/sync or https://github.com/golang/sync\nfigure out how to get started with development.\n\nChange-Id: Iafdbec407bd6f61459aabe6e2c4703132d038b69\nReviewed-on: https://go-review.googlesource.com/49872\nReviewed-by: Kevin Burke \u003ckev@inburke.com\u003e\n"
    },
    {
      "commit": "f52d1811a62927559de87708c8913c1650ce4f26",
      "tree": "8004aa51e26203cfdc5d2847caf4b0c4c66c3431",
      "parents": [
        "57af736625aaa69dfa099432bb67e0808eef3bcc"
      ],
      "author": {
        "name": "Jonathan Amsterdam",
        "email": "jba@google.com",
        "time": "Wed May 17 16:25:26 2017 -0400"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@golang.org",
        "time": "Wed May 17 21:12:32 2017 +0000"
      },
      "message": "semaphore: make test time independent of GOMAXPROCS\n\nTestWeighted\u0027s runtime was roughly proportional to the number of CPUs,\nso it ran a long time on PPCs (160 CPUs).\n\nMake the number of loops in the test an inverse function of the number\nof CPUs, to keep the test short.\n\nChange-Id: Id853dbb5e5e2f9fb95966d19ef0c511e3f8080e0\nReviewed-on: https://go-review.googlesource.com/43632\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\nRun-TryBot: Bryan Mills \u003cbcmills@google.com\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "57af736625aaa69dfa099432bb67e0808eef3bcc",
      "tree": "d0c9c993bccc5a46800a8684c304098ee5eb1678",
      "parents": [
        "305c7b3edb4364a58141b30686a61a87bdb79a3a"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Tue May 09 16:06:53 2017 -0400"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Wed May 10 20:14:52 2017 +0000"
      },
      "message": "syncmap: release m.mu during (*RWMutexMap).Range callbacks\n\nThe mainline syncmap.Map has allowed mutations within Range callbacks\nsince https://golang.org/cl/37342. The reference\nimplementations used in map_bench_test need to do the same.\n\nChange-Id: Id73d254fa01cc64a1f00eb1903488796e1282423\nReviewed-on: https://go-review.googlesource.com/42956\nRun-TryBot: Bryan Mills \u003cbcmills@google.com\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\n"
    },
    {
      "commit": "305c7b3edb4364a58141b30686a61a87bdb79a3a",
      "tree": "56a2e47c7945c7dcb11f22e0c0b316a6b4601d7b",
      "parents": [
        "de49d9dcd27d4f764488181bea099dfe6179bcf0"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Thu May 04 14:06:05 2017 -0400"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Thu May 04 18:26:18 2017 +0000"
      },
      "message": "syncmap: backport CL 42095\n\nSee https://go-review.googlesource.com/c/42095/.\n\nChange-Id: I9f15a785bb4bd28ab02f17de65c63ad4b6e083c9\nReviewed-on: https://go-review.googlesource.com/42594\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nRun-TryBot: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "de49d9dcd27d4f764488181bea099dfe6179bcf0",
      "tree": "960a7d308015952043336b58175c6e4104f770e1",
      "parents": [
        "5a06fca2c336a4b2b2fcb45702e8c47621b2aa2c"
      ],
      "author": {
        "name": "Jonathan Amsterdam",
        "email": "jba@google.com",
        "time": "Tue Apr 18 16:42:32 2017 -0400"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@golang.org",
        "time": "Tue Apr 18 21:08:38 2017 +0000"
      },
      "message": "semaphore: avoid loop variable capture by closure\n\nChange-Id: I21c5dc48ffe43aa27c50a42f9c9a01ac1f0c747c\nReviewed-on: https://go-review.googlesource.com/40991\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Glenn Lewis \u003cgmlewis@google.com\u003e\n"
    },
    {
      "commit": "5a06fca2c336a4b2b2fcb45702e8c47621b2aa2c",
      "tree": "221f5395cd2568e8236eb2e1402bf4a38e443dfb",
      "parents": [
        "a60ad46e0ed33d02e09bda439efaf9c9727dbc6c"
      ],
      "author": {
        "name": "Jonathan Amsterdam",
        "email": "jba@google.com",
        "time": "Fri Mar 17 13:13:11 2017 -0400"
      },
      "committer": {
        "name": "Ian Lance Taylor",
        "email": "iant@golang.org",
        "time": "Fri Mar 17 23:16:01 2017 +0000"
      },
      "message": "semaphore: add a weighted semaphore implementation\n\nThis package provides a weighted semaphore that is context-aware.\n\nThe code is derived from a similar package inside Google.\n\nChange-Id: Id1dad96d79e8ccfd289e4299e8265aa5bdad3a5b\nReviewed-on: https://go-review.googlesource.com/38298\nReviewed-by: Ian Lance Taylor \u003ciant@golang.org\u003e\nReviewed-by: Damien Neil \u003cdneil@google.com\u003e\nRun-TryBot: Ian Lance Taylor \u003ciant@golang.org\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "a60ad46e0ed33d02e09bda439efaf9c9727dbc6c",
      "tree": "d8a9466758309c17d74dc23cbca659c26b2f280a",
      "parents": [
        "86ddc858aa39d0f6cccccd733e482ddc52b852e9"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Thu Feb 16 13:55:22 2017 -0500"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Wed Mar 15 18:56:49 2017 +0000"
      },
      "message": "syncmap: remove blocking for all operations on existing keys\n\nIn the previous version, Loads of keys with unchanged values would\nblock on the Mutex if the map was dirty, leading to potentially long\nstalls while the read-only map is being copied to the dirty map.\n\nThis change adds a double pointer indirection to each entry and an\nextra atomic load on the fast path. In exchange, it removes the need\nto lock the map for nearly all operations on existing keys.\n\nEach entry is represented by an atomically-updated pointer to an\ninterface{} value. The same entries are stored in both the read-only\nand dirty maps. Keys deleted before the dirty map was last copied are\nmarked as \"expunged\" and omitted from the dirty map until the next\nStore to that key.\n\nNewly-stored values exist only in the dirty map. The existence of new\nkeys in the dirty map is indicated by an \"amended\" bit attached to the\nread-only map, allowing Load or Delete calls for nonexistent keys to\nsometimes return immediately (without acquiring the Mutex).\n\nThis trades off a bit of steady-state throughput in the \"mostly hits\"\ncase in exchange for less contention (and lower Load tail latencies)\nfor mixed Load/Store/Delete usage.\n\nUnfortunately, the latency impact is currently difficult to measure\n(#19128).\n\nupdates golang/go#19128\nupdates golang/go#18177\n\nhttps://perf.golang.org/search?q\u003dupload:20170315.5\n\nname                                               old time/op    new time/op    delta\nLoadMostlyHits/*syncmap_test.DeepCopyMap             70.3ns ± 6%    70.2ns ± 4%      ~     (p\u003d0.886 n\u003d4+4)\nLoadMostlyHits/*syncmap_test.DeepCopyMap-48          10.9ns ± 4%    13.6ns ±24%      ~     (p\u003d0.314 n\u003d4+4)\nLoadMostlyHits/*syncmap_test.RWMutexMap              86.0ns ± 9%    86.0ns ± 4%      ~     (p\u003d1.000 n\u003d4+4)\nLoadMostlyHits/*syncmap_test.RWMutexMap-48            140ns ± 3%     139ns ± 2%      ~     (p\u003d0.686 n\u003d4+4)\nLoadMostlyHits/*syncmap.Map                          70.6ns ± 8%    70.3ns ± 1%      ~     (p\u003d0.571 n\u003d4+4)\nLoadMostlyHits/*syncmap.Map-48                       10.3ns ± 7%    11.2ns ± 5%      ~     (p\u003d0.114 n\u003d4+4)\nLoadMostlyMisses/*syncmap_test.DeepCopyMap           59.4ns ± 4%    59.4ns ± 4%      ~     (p\u003d1.000 n\u003d4+4)\nLoadMostlyMisses/*syncmap_test.DeepCopyMap-48        10.4ns ±30%    12.6ns ±29%      ~     (p\u003d0.486 n\u003d4+4)\nLoadMostlyMisses/*syncmap_test.RWMutexMap            64.8ns ± 6%    63.8ns ± 4%      ~     (p\u003d0.686 n\u003d4+4)\nLoadMostlyMisses/*syncmap_test.RWMutexMap-48          138ns ± 3%     139ns ± 2%      ~     (p\u003d0.800 n\u003d4+4)\nLoadMostlyMisses/*syncmap.Map                        51.5ns ± 7%    50.4ns ± 2%      ~     (p\u003d0.371 n\u003d4+4)\nLoadMostlyMisses/*syncmap.Map-48                     9.37ns ± 3%    9.40ns ± 3%      ~     (p\u003d0.886 n\u003d4+4)\nLoadOrStoreBalanced/*syncmap_test.RWMutexMap          820ns ±17%     834ns ±14%      ~     (p\u003d1.000 n\u003d4+4)\nLoadOrStoreBalanced/*syncmap_test.RWMutexMap-48      1.38µs ± 4%    1.38µs ± 3%      ~     (p\u003d0.886 n\u003d4+4)\nLoadOrStoreBalanced/*syncmap.Map                      709ns ±13%    1085ns ± 9%   +53.09%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreBalanced/*syncmap.Map-48                  1.30µs ±13%    1.08µs ± 8%   -17.40%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreUnique/*syncmap_test.RWMutexMap           1.26µs ±14%    1.16µs ±29%      ~     (p\u003d0.343 n\u003d4+4)\nLoadOrStoreUnique/*syncmap_test.RWMutexMap-48        1.82µs ±15%    1.98µs ± 6%      ~     (p\u003d0.143 n\u003d4+4)\nLoadOrStoreUnique/*syncmap.Map                       1.06µs ± 7%    1.86µs ±11%   +76.09%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreUnique/*syncmap.Map-48                    2.00µs ± 4%    1.62µs ± 4%   -19.20%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreCollision/*syncmap_test.DeepCopyMap       32.9ns ± 8%    32.6ns ± 9%      ~     (p\u003d0.686 n\u003d4+4)\nLoadOrStoreCollision/*syncmap_test.DeepCopyMap-48   2.26ns ±136%    3.41ns ±62%      ~     (p\u003d0.114 n\u003d4+4)\nLoadOrStoreCollision/*syncmap_test.RWMutexMap        58.0ns ±20%    54.6ns ±17%      ~     (p\u003d0.343 n\u003d4+4)\nLoadOrStoreCollision/*syncmap_test.RWMutexMap-48      458ns ± 2%     445ns ± 6%      ~     (p\u003d0.229 n\u003d4+4)\nLoadOrStoreCollision/*syncmap.Map                    35.8ns ± 5%    39.6ns ± 9%      ~     (p\u003d0.114 n\u003d4+4)\nLoadOrStoreCollision/*syncmap.Map-48                 1.24ns ± 2%    1.58ns ± 4%   +27.16%  (p\u003d0.029 n\u003d4+4)\nRange/*syncmap_test.DeepCopyMap                      19.7µs ± 4%    19.8µs ± 3%      ~     (p\u003d0.686 n\u003d4+4)\nRange/*syncmap_test.DeepCopyMap-48                    763ns ± 1%     864ns ± 3%   +13.24%  (p\u003d0.029 n\u003d4+4)\nRange/*syncmap_test.RWMutexMap                       20.9µs ± 3%    20.4µs ± 4%      ~     (p\u003d0.343 n\u003d4+4)\nRange/*syncmap_test.RWMutexMap-48                     764ns ± 1%     870ns ± 1%   +13.77%  (p\u003d0.029 n\u003d4+4)\nRange/*syncmap.Map                                   20.4µs ± 5%    22.7µs ± 5%   +10.98%  (p\u003d0.029 n\u003d4+4)\nRange/*syncmap.Map-48                                 776ns ± 3%     954ns ± 4%   +22.95%  (p\u003d0.029 n\u003d4+4)\nAdversarialAlloc/*syncmap_test.DeepCopyMap            206ns ± 5%     199ns ± 2%      ~     (p\u003d0.200 n\u003d4+4)\nAdversarialAlloc/*syncmap_test.DeepCopyMap-48        8.94µs ± 5%    9.21µs ± 4%      ~     (p\u003d0.200 n\u003d4+4)\nAdversarialAlloc/*syncmap_test.RWMutexMap            63.4ns ± 4%    63.8ns ± 3%      ~     (p\u003d0.686 n\u003d4+4)\nAdversarialAlloc/*syncmap_test.RWMutexMap-48          184ns ±10%     198ns ±11%      ~     (p\u003d0.343 n\u003d4+4)\nAdversarialAlloc/*syncmap.Map                         213ns ± 3%     264ns ± 3%   +23.97%  (p\u003d0.029 n\u003d4+4)\nAdversarialAlloc/*syncmap.Map-48                      556ns ± 5%    1389ns ± 8%  +149.93%  (p\u003d0.029 n\u003d4+4)\nAdversarialDelete/*syncmap_test.DeepCopyMap           300ns ± 6%     304ns ± 7%      ~     (p\u003d0.886 n\u003d4+4)\nAdversarialDelete/*syncmap_test.DeepCopyMap-48        647ns ± 3%     646ns ± 3%      ~     (p\u003d0.943 n\u003d4+4)\nAdversarialDelete/*syncmap_test.RWMutexMap           69.1ns ± 1%    69.2ns ± 6%      ~     (p\u003d0.686 n\u003d4+4)\nAdversarialDelete/*syncmap_test.RWMutexMap-48         289ns ±15%     300ns ±17%      ~     (p\u003d0.829 n\u003d4+4)\nAdversarialDelete/*syncmap.Map                        198ns ± 5%     264ns ± 2%   +33.17%  (p\u003d0.029 n\u003d4+4)\nAdversarialDelete/*syncmap.Map-48                     291ns ± 9%     173ns ± 8%   -40.50%  (p\u003d0.029 n\u003d4+4)\n\nname                                               old alloc/op   new alloc/op   delta\nLoadMostlyHits/*syncmap_test.DeepCopyMap              7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyHits/*syncmap_test.DeepCopyMap-48           7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyHits/*syncmap_test.RWMutexMap               7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyHits/*syncmap_test.RWMutexMap-48            7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyHits/*syncmap.Map                           7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyHits/*syncmap.Map-48                        7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyMisses/*syncmap_test.DeepCopyMap            7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyMisses/*syncmap_test.DeepCopyMap-48         7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyMisses/*syncmap_test.RWMutexMap             7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyMisses/*syncmap_test.RWMutexMap-48          7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyMisses/*syncmap.Map                         7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadMostlyMisses/*syncmap.Map-48                      7.00B ± 0%     7.00B ± 0%      ~     (all equal)\nLoadOrStoreBalanced/*syncmap_test.RWMutexMap          95.0B ± 0%     95.0B ± 0%      ~     (all equal)\nLoadOrStoreBalanced/*syncmap_test.RWMutexMap-48       95.0B ± 0%     95.0B ± 0%      ~     (all equal)\nLoadOrStoreBalanced/*syncmap.Map                      95.0B ± 0%     88.0B ± 0%    -7.37%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreBalanced/*syncmap.Map-48                   95.0B ± 0%     88.0B ± 0%    -7.37%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreUnique/*syncmap_test.RWMutexMap             175B ± 0%      175B ± 0%      ~     (all equal)\nLoadOrStoreUnique/*syncmap_test.RWMutexMap-48          175B ± 0%      175B ± 0%      ~     (all equal)\nLoadOrStoreUnique/*syncmap.Map                         175B ± 0%      161B ± 0%    -8.00%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreUnique/*syncmap.Map-48                      175B ± 0%      161B ± 0%    -8.00%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreCollision/*syncmap_test.DeepCopyMap        0.00B          0.00B           ~     (all equal)\nLoadOrStoreCollision/*syncmap_test.DeepCopyMap-48     0.00B          0.00B           ~     (all equal)\nLoadOrStoreCollision/*syncmap_test.RWMutexMap         0.00B          0.00B           ~     (all equal)\nLoadOrStoreCollision/*syncmap_test.RWMutexMap-48      0.00B          0.00B           ~     (all equal)\nLoadOrStoreCollision/*syncmap.Map                     0.00B          0.00B           ~     (all equal)\nLoadOrStoreCollision/*syncmap.Map-48                  0.00B          0.00B           ~     (all equal)\nRange/*syncmap_test.DeepCopyMap                       0.00B          0.00B           ~     (all equal)\nRange/*syncmap_test.DeepCopyMap-48                    0.00B          0.00B           ~     (all equal)\nRange/*syncmap_test.RWMutexMap                        0.00B          0.00B           ~     (all equal)\nRange/*syncmap_test.RWMutexMap-48                     0.00B          0.00B           ~     (all equal)\nRange/*syncmap.Map                                    0.00B          0.00B           ~     (all equal)\nRange/*syncmap.Map-48                                 0.00B          0.00B           ~     (all equal)\nAdversarialAlloc/*syncmap_test.DeepCopyMap            74.0B ± 0%     74.0B ± 0%      ~     (all equal)\nAdversarialAlloc/*syncmap_test.DeepCopyMap-48        3.15kB ± 0%    3.15kB ± 0%      ~     (p\u003d1.000 n\u003d4+4)\nAdversarialAlloc/*syncmap_test.RWMutexMap             8.00B ± 0%     8.00B ± 0%      ~     (all equal)\nAdversarialAlloc/*syncmap_test.RWMutexMap-48          8.00B ± 0%     8.00B ± 0%      ~     (all equal)\nAdversarialAlloc/*syncmap.Map                         74.0B ± 0%     55.0B ± 0%   -25.68%  (p\u003d0.029 n\u003d4+4)\nAdversarialAlloc/*syncmap.Map-48                      8.00B ± 0%    56.25B ± 1%  +603.12%  (p\u003d0.029 n\u003d4+4)\nAdversarialDelete/*syncmap_test.DeepCopyMap            155B ± 0%      155B ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap_test.DeepCopyMap-48         156B ± 0%      156B ± 0%      ~     (p\u003d1.000 n\u003d4+4)\nAdversarialDelete/*syncmap_test.RWMutexMap            8.00B ± 0%     8.00B ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap_test.RWMutexMap-48         8.00B ± 0%     8.00B ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap.Map                        81.0B ± 0%     65.0B ± 0%   -19.75%  (p\u003d0.029 n\u003d4+4)\nAdversarialDelete/*syncmap.Map-48                     23.0B ± 9%     15.2B ± 5%   -33.70%  (p\u003d0.029 n\u003d4+4)\n\nname                                               old allocs/op  new allocs/op  delta\nLoadMostlyHits/*syncmap_test.DeepCopyMap               0.00           0.00           ~     (all equal)\nLoadMostlyHits/*syncmap_test.DeepCopyMap-48            0.00           0.00           ~     (all equal)\nLoadMostlyHits/*syncmap_test.RWMutexMap                0.00           0.00           ~     (all equal)\nLoadMostlyHits/*syncmap_test.RWMutexMap-48             0.00           0.00           ~     (all equal)\nLoadMostlyHits/*syncmap.Map                            0.00           0.00           ~     (all equal)\nLoadMostlyHits/*syncmap.Map-48                         0.00           0.00           ~     (all equal)\nLoadMostlyMisses/*syncmap_test.DeepCopyMap             0.00           0.00           ~     (all equal)\nLoadMostlyMisses/*syncmap_test.DeepCopyMap-48          0.00           0.00           ~     (all equal)\nLoadMostlyMisses/*syncmap_test.RWMutexMap              0.00           0.00           ~     (all equal)\nLoadMostlyMisses/*syncmap_test.RWMutexMap-48           0.00           0.00           ~     (all equal)\nLoadMostlyMisses/*syncmap.Map                          0.00           0.00           ~     (all equal)\nLoadMostlyMisses/*syncmap.Map-48                       0.00           0.00           ~     (all equal)\nLoadOrStoreBalanced/*syncmap_test.RWMutexMap           2.00 ± 0%      2.00 ± 0%      ~     (all equal)\nLoadOrStoreBalanced/*syncmap_test.RWMutexMap-48        2.00 ± 0%      2.00 ± 0%      ~     (all equal)\nLoadOrStoreBalanced/*syncmap.Map                       2.00 ± 0%      3.00 ± 0%   +50.00%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreBalanced/*syncmap.Map-48                    2.00 ± 0%      3.00 ± 0%   +50.00%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreUnique/*syncmap_test.RWMutexMap             2.00 ± 0%      2.00 ± 0%      ~     (all equal)\nLoadOrStoreUnique/*syncmap_test.RWMutexMap-48          2.00 ± 0%      2.00 ± 0%      ~     (all equal)\nLoadOrStoreUnique/*syncmap.Map                         2.00 ± 0%      4.00 ± 0%  +100.00%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreUnique/*syncmap.Map-48                      2.00 ± 0%      4.00 ± 0%  +100.00%  (p\u003d0.029 n\u003d4+4)\nLoadOrStoreCollision/*syncmap_test.DeepCopyMap         0.00           0.00           ~     (all equal)\nLoadOrStoreCollision/*syncmap_test.DeepCopyMap-48      0.00           0.00           ~     (all equal)\nLoadOrStoreCollision/*syncmap_test.RWMutexMap          0.00           0.00           ~     (all equal)\nLoadOrStoreCollision/*syncmap_test.RWMutexMap-48       0.00           0.00           ~     (all equal)\nLoadOrStoreCollision/*syncmap.Map                      0.00           0.00           ~     (all equal)\nLoadOrStoreCollision/*syncmap.Map-48                   0.00           0.00           ~     (all equal)\nRange/*syncmap_test.DeepCopyMap                        0.00           0.00           ~     (all equal)\nRange/*syncmap_test.DeepCopyMap-48                     0.00           0.00           ~     (all equal)\nRange/*syncmap_test.RWMutexMap                         0.00           0.00           ~     (all equal)\nRange/*syncmap_test.RWMutexMap-48                      0.00           0.00           ~     (all equal)\nRange/*syncmap.Map                                     0.00           0.00           ~     (all equal)\nRange/*syncmap.Map-48                                  0.00           0.00           ~     (all equal)\nAdversarialAlloc/*syncmap_test.DeepCopyMap             1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialAlloc/*syncmap_test.DeepCopyMap-48          1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialAlloc/*syncmap_test.RWMutexMap              1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialAlloc/*syncmap_test.RWMutexMap-48           1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialAlloc/*syncmap.Map                          1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialAlloc/*syncmap.Map-48                       1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap_test.DeepCopyMap            1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap_test.DeepCopyMap-48         1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap_test.RWMutexMap             1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap_test.RWMutexMap-48          1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap.Map                         1.00 ± 0%      1.00 ± 0%      ~     (all equal)\nAdversarialDelete/*syncmap.Map-48                      1.00 ± 0%      1.00 ± 0%      ~     (all equal)\n\nChange-Id: I93c9458505d84238cc8e9016a7dfd285868af236\nReviewed-on: https://go-review.googlesource.com/37342\nReviewed-by: Russ Cox \u003crsc@golang.org\u003e\n"
    },
    {
      "commit": "86ddc858aa39d0f6cccccd733e482ddc52b852e9",
      "tree": "755d7b1c0899755f5a8b93a7fc80b4eab08377c0",
      "parents": [
        "37569ff7631ba24a93f87d09625ec155aa65b676"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Thu Feb 16 13:46:11 2017 -0500"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Thu Feb 16 19:22:36 2017 +0000"
      },
      "message": "syncmap: make quick-check output more readable\n\nAdd a test for Range with concurrent Loads and Stores.\n\nThe previous quick-check tests generated long, mostly-non-ASCII\nstrings that were hard to debug on failure; this change makes the keys\nand values short and human-readable, which also tends to produce more\nkey collisions in the test as a side-effect.\n\nupdates golang/go#18177\n\nChange-Id: Ie56a64ec9fe295435682b90c3e6466ed5b349bf9\nReviewed-on: https://go-review.googlesource.com/37150\nReviewed-by: Russ Cox \u003crsc@golang.org\u003e\n"
    },
    {
      "commit": "37569ff7631ba24a93f87d09625ec155aa65b676",
      "tree": "e5d5bfc6f9f980c61b6e9ab71e341b8fe64a9988",
      "parents": [
        "54b13b0b037d2b3593991a7fa23d3f274669aab7"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Thu Feb 16 13:52:35 2017 -0500"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Thu Feb 16 19:20:33 2017 +0000"
      },
      "message": "syncmap: add benchmark for Range\n\nadjust BenchmarkAdversarialDelete to be somewhat more adversarial.\n\nupdates golang/go#18177\n\nChange-Id: Id01ed1077a0447dcfc6ea3929c22baaddbc9d6ee\nReviewed-on: https://go-review.googlesource.com/37151\nReviewed-by: Russ Cox \u003crsc@golang.org\u003e\n"
    },
    {
      "commit": "54b13b0b037d2b3593991a7fa23d3f274669aab7",
      "tree": "5d098b91abbfde01387d5081055a0c5814e6dae8",
      "parents": [
        "450f422ab23cf9881c94e2db30cac0eb1b7cf80c"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Fri Dec 02 19:16:14 2016 -0500"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Wed Feb 15 17:32:38 2017 +0000"
      },
      "message": "syncmap: add a synchronized map implementation.\n\nThis is a draft for the sync.Map API proposed in golang/go#18177.\n\nIt supports fast-path loads via an atomic variable, falling back to a\nMutex for stores. In order to keep stores amortized to O(1), loads\nfollowing a store follow the Mutex path until enough loads have\noccurred to offset the cost of a deep copy.\n\nFor mostly-read loads, such as the maps in the reflect package in the\nstandard library, this significantly reduces cache-line contention vs.\na plain RWMutex with a map.\n\ngoos: linux\ngoarch: amd64\npkg: golang.org/x/sync/syncmap\nBenchmarkLoadMostlyHits/*syncmap_test.DeepCopyMap               20000000                73.1 ns/op\nBenchmarkLoadMostlyHits/*syncmap_test.DeepCopyMap-48            100000000               13.8 ns/op\nBenchmarkLoadMostlyHits/*syncmap_test.RWMutexMap                20000000                87.7 ns/op\nBenchmarkLoadMostlyHits/*syncmap_test.RWMutexMap-48             10000000               154 ns/op\nBenchmarkLoadMostlyHits/*syncmap.Map                            20000000                72.1 ns/op\nBenchmarkLoadMostlyHits/*syncmap.Map-48                         100000000               11.2 ns/op\nBenchmarkLoadMostlyMisses/*syncmap_test.DeepCopyMap             20000000                63.2 ns/op\nBenchmarkLoadMostlyMisses/*syncmap_test.DeepCopyMap-48          200000000               14.2 ns/op\nBenchmarkLoadMostlyMisses/*syncmap_test.RWMutexMap              20000000                72.7 ns/op\nBenchmarkLoadMostlyMisses/*syncmap_test.RWMutexMap-48           10000000               150 ns/op\nBenchmarkLoadMostlyMisses/*syncmap.Map                          30000000                56.4 ns/op\nBenchmarkLoadMostlyMisses/*syncmap.Map-48                       200000000                9.77 ns/op\nBenchmarkLoadOrStoreBalanced/*syncmap_test.RWMutexMap            2000000               683 ns/op\nBenchmarkLoadOrStoreBalanced/*syncmap_test.RWMutexMap-48         1000000              1394 ns/op\nBenchmarkLoadOrStoreBalanced/*syncmap.Map                        2000000               645 ns/op\nBenchmarkLoadOrStoreBalanced/*syncmap.Map-48                     1000000              1253 ns/op\nBenchmarkLoadOrStoreUnique/*syncmap_test.RWMutexMap              1000000              1015 ns/op\nBenchmarkLoadOrStoreUnique/*syncmap_test.RWMutexMap-48           1000000              1911 ns/op\nBenchmarkLoadOrStoreUnique/*syncmap.Map                          1000000              1018 ns/op\nBenchmarkLoadOrStoreUnique/*syncmap.Map-48                       1000000              1776 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap_test.DeepCopyMap         50000000                30.2 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap_test.DeepCopyMap-48      2000000000               1.24 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap_test.RWMutexMap          30000000                50.1 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap_test.RWMutexMap-48        5000000               451 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap.Map                      30000000                36.8 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap.Map-48                   2000000000               1.24 ns/op\nBenchmarkAdversarialAlloc/*syncmap_test.DeepCopyMap             10000000               213 ns/op\nBenchmarkAdversarialAlloc/*syncmap_test.DeepCopyMap-48           1000000              5012 ns/op\nBenchmarkAdversarialAlloc/*syncmap_test.RWMutexMap              20000000                68.8 ns/op\nBenchmarkAdversarialAlloc/*syncmap_test.RWMutexMap-48            5000000               429 ns/op\nBenchmarkAdversarialAlloc/*syncmap.Map                           5000000               229 ns/op\nBenchmarkAdversarialAlloc/*syncmap.Map-48                        2000000               600 ns/op\nBenchmarkAdversarialDelete/*syncmap_test.DeepCopyMap             5000000               314 ns/op\nBenchmarkAdversarialDelete/*syncmap_test.DeepCopyMap-48          2000000               726 ns/op\nBenchmarkAdversarialDelete/*syncmap_test.RWMutexMap             20000000                63.2 ns/op\nBenchmarkAdversarialDelete/*syncmap_test.RWMutexMap-48           5000000               469 ns/op\nBenchmarkAdversarialDelete/*syncmap.Map                         10000000               203 ns/op\nBenchmarkAdversarialDelete/*syncmap.Map-48                      10000000               253 ns/op\n\ngoos: linux\ngoarch: ppc64le\npkg: golang.org/x/sync/syncmap\nBenchmarkLoadMostlyHits/*syncmap_test.DeepCopyMap                5000000               253 ns/op\nBenchmarkLoadMostlyHits/*syncmap_test.DeepCopyMap-48            50000000                26.2 ns/op\nBenchmarkLoadMostlyHits/*syncmap_test.RWMutexMap                 5000000               505 ns/op\nBenchmarkLoadMostlyHits/*syncmap_test.RWMutexMap-48              3000000               443 ns/op\nBenchmarkLoadMostlyHits/*syncmap.Map                            10000000               200 ns/op\nBenchmarkLoadMostlyHits/*syncmap.Map-48                         100000000               18.1 ns/op\nBenchmarkLoadMostlyMisses/*syncmap_test.DeepCopyMap             10000000               162 ns/op\nBenchmarkLoadMostlyMisses/*syncmap_test.DeepCopyMap-48          100000000               23.8 ns/op\nBenchmarkLoadMostlyMisses/*syncmap_test.RWMutexMap              10000000               195 ns/op\nBenchmarkLoadMostlyMisses/*syncmap_test.RWMutexMap-48            3000000               531 ns/op\nBenchmarkLoadMostlyMisses/*syncmap.Map                          10000000               182 ns/op\nBenchmarkLoadMostlyMisses/*syncmap.Map-48                       100000000               15.8 ns/op\nBenchmarkLoadOrStoreBalanced/*syncmap_test.RWMutexMap            1000000              1664 ns/op\nBenchmarkLoadOrStoreBalanced/*syncmap_test.RWMutexMap-48         1000000              1768 ns/op\nBenchmarkLoadOrStoreBalanced/*syncmap.Map                        1000000              2128 ns/op\nBenchmarkLoadOrStoreBalanced/*syncmap.Map-48                     1000000              1903 ns/op\nBenchmarkLoadOrStoreUnique/*syncmap_test.RWMutexMap              1000000              2657 ns/op\nBenchmarkLoadOrStoreUnique/*syncmap_test.RWMutexMap-48           1000000              2577 ns/op\nBenchmarkLoadOrStoreUnique/*syncmap.Map                          1000000              1714 ns/op\nBenchmarkLoadOrStoreUnique/*syncmap.Map-48                       1000000              2484 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap_test.DeepCopyMap         10000000               130 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap_test.DeepCopyMap-48      100000000               11.3 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap_test.RWMutexMap           3000000               426 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap_test.RWMutexMap-48        2000000               930 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap.Map                      10000000               131 ns/op\nBenchmarkLoadOrStoreCollision/*syncmap.Map-48                   300000000                4.07 ns/op\nBenchmarkAdversarialAlloc/*syncmap_test.DeepCopyMap              3000000               447 ns/op\nBenchmarkAdversarialAlloc/*syncmap_test.DeepCopyMap-48            300000              4159 ns/op\nBenchmarkAdversarialAlloc/*syncmap_test.RWMutexMap              10000000               191 ns/op\nBenchmarkAdversarialAlloc/*syncmap_test.RWMutexMap-48            3000000               535 ns/op\nBenchmarkAdversarialAlloc/*syncmap.Map                           2000000               525 ns/op\nBenchmarkAdversarialAlloc/*syncmap.Map-48                        1000000              1000 ns/op\nBenchmarkAdversarialDelete/*syncmap_test.DeepCopyMap             2000000               711 ns/op\nBenchmarkAdversarialDelete/*syncmap_test.DeepCopyMap-48          2000000               900 ns/op\nBenchmarkAdversarialDelete/*syncmap_test.RWMutexMap              3000000               354 ns/op\nBenchmarkAdversarialDelete/*syncmap_test.RWMutexMap-48           3000000               473 ns/op\nBenchmarkAdversarialDelete/*syncmap.Map                          2000000              1357 ns/op\nBenchmarkAdversarialDelete/*syncmap.Map-48                       5000000               334 ns/op\n\nUpdates golang/go#18177\n\nChange-Id: I8d561b617b1cd2ca03a8e68a5d5a28a519a0ce38\nReviewed-on: https://go-review.googlesource.com/33912\nReviewed-by: Russ Cox \u003crsc@golang.org\u003e\n"
    },
    {
      "commit": "450f422ab23cf9881c94e2db30cac0eb1b7cf80c",
      "tree": "dc12aea0b3b771336c7c8b5d319fa67e8a5a1cb5",
      "parents": [
        "81567d9de79acf53912da6b8d098d3a38069e526"
      ],
      "author": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Mon Dec 05 14:39:15 2016 -0800"
      },
      "committer": {
        "name": "Josh Bleecher Snyder",
        "email": "josharian@gmail.com",
        "time": "Tue Dec 06 01:46:32 2016 +0000"
      },
      "message": ".: add codereview.cfg\n\nThis makes git-codereview review issue references\nto refer to the main Go repo.\n\nChange-Id: I17003885f15358f776a475a76a31dac179de9676\nReviewed-on: https://go-review.googlesource.com/33908\nReviewed-by: Bryan Mills \u003cbcmills@google.com\u003e\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\n"
    },
    {
      "commit": "81567d9de79acf53912da6b8d098d3a38069e526",
      "tree": "798e9ce2a7122665dd8bfbfa78a482916bb93009",
      "parents": [
        "1ae7c7b29e06598039be46c5083819ba6fd7a97e"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Fri Jul 22 14:36:19 2016 -0400"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Thu Dec 01 22:51:26 2016 +0000"
      },
      "message": "errgroup: fix misleading comment in MD5All example\n\nChange-Id: I0c2f0ce9b6006dac13c5f5faed752a2475992805\nReviewed-on: https://go-review.googlesource.com/33851\nReviewed-by: Ian Lance Taylor \u003ciant@golang.org\u003e\n"
    },
    {
      "commit": "1ae7c7b29e06598039be46c5083819ba6fd7a97e",
      "tree": "dcc43a145d324d76c63207a49c36870994a453c1",
      "parents": [
        "316e794f7b5e3df4e95175a45a5fb8b12f85cb4f"
      ],
      "author": {
        "name": "Matt Layher",
        "email": "mdlayher@gmail.com",
        "time": "Tue Oct 04 18:49:57 2016 -0400"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@golang.org",
        "time": "Tue Oct 04 23:36:20 2016 +0000"
      },
      "message": "singleflight: copy from internal/singleflight in standard library\n\nUpdates golang/go#17338\n\nChange-Id: Icf1972cdec0bbc9b3142141d9e706c07f312efc0\nReviewed-on: https://go-review.googlesource.com/30292\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nRun-TryBot: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "316e794f7b5e3df4e95175a45a5fb8b12f85cb4f",
      "tree": "4f82021d2f6dd4f55db9298f1f421333ac478b04",
      "parents": [
        "53cf14c8d7596ec5230669db938d396db1bba8a7"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Fri Jul 15 14:54:39 2016 -0400"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Fri Jul 15 19:05:49 2016 +0000"
      },
      "message": "sync: delete dummy builders_test file\n\nThe builders should be happy building errgroup instead now.\n\nChange-Id: I99f549032f771e067b5f7780eba1cc6e91bbdfa5\nReviewed-on: https://go-review.googlesource.com/24962\nRun-TryBot: Bryan Mills \u003cbcmills@google.com\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\n"
    },
    {
      "commit": "53cf14c8d7596ec5230669db938d396db1bba8a7",
      "tree": "04e6c860b7c58fdd1718a73a871172162e12c560",
      "parents": [
        "457c5828408160d6a47e17645169cf8fa20218c4"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Fri Jul 15 14:34:44 2016 -0400"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Fri Jul 15 18:40:41 2016 +0000"
      },
      "message": "errgroup: fix build errors in errgroup_test\n\nChange-Id: Ie5ebfa26b6234f833139784da859d32cc1416b26\nReviewed-on: https://go-review.googlesource.com/24961\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nRun-TryBot: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\nTryBot-Result: Gobot Gobot \u003cgobot@golang.org\u003e\n"
    },
    {
      "commit": "457c5828408160d6a47e17645169cf8fa20218c4",
      "tree": "e40e10a7f9a8896cf46134683523ba64c1980a3e",
      "parents": [
        "c6cf2573d3cd3711e69e7283ae5c5621442822ad"
      ],
      "author": {
        "name": "Bryan C. Mills",
        "email": "bcmills@google.com",
        "time": "Wed Jul 13 13:45:13 2016 -0400"
      },
      "committer": {
        "name": "Bryan Mills",
        "email": "bcmills@google.com",
        "time": "Fri Jul 15 18:28:34 2016 +0000"
      },
      "message": "errgroup: add package\n\nPackage errgroup provides synchronization, error propagation, and\nContext cancellation for groups of goroutines working on subtasks of a\ncommon task.\n\nChange-Id: Ic9e51f6f846124076bbff9d53b0f09dc7fc5f2f0\nReviewed-on: https://go-review.googlesource.com/24894\nReviewed-by: Sameer Ajmani \u003csameer@golang.org\u003e\nReviewed-by: Brad Fitzpatrick \u003cbradfitz@golang.org\u003e\n"
    },
    {
      "commit": "c6cf2573d3cd3711e69e7283ae5c5621442822ad",
      "tree": "7aad6a3dfe74a113584ee2e7fd7d4837419a4d32",
      "parents": [
        "b62d5b6cb434c43aa5eb12d8970fef8dda5138c7"
      ],
      "author": {
        "name": "Brad Fitzpatrick",
        "email": "brad@danga.com",
        "time": "Wed Jul 13 13:36:30 2016 -0600"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@golang.org",
        "time": "Wed Jul 13 20:16:11 2016 +0000"
      },
      "message": "sync: add a Go file to make the builders happy\n\nChange-Id: I6e4fbebee02076b8c9d43318c3f7260f2339c1a3\nReviewed-on: https://go-review.googlesource.com/24907\nReviewed-by: Quentin Smith \u003cquentin@golang.org\u003e\n"
    },
    {
      "commit": "b62d5b6cb434c43aa5eb12d8970fef8dda5138c7",
      "tree": "d3c3c858999bf4ed2624131181bed3b9034c1507",
      "parents": [],
      "author": {
        "name": "Andrew Gerrand",
        "email": "adg@golang.org",
        "time": "Fri Oct 30 14:31:46 2015 +1100"
      },
      "committer": {
        "name": "Andrew Gerrand",
        "email": "adg@golang.org",
        "time": "Fri Oct 30 14:31:46 2015 +1100"
      },
      "message": "initial commit\n"
    }
  ]
}
