)]}'
{
  "commit": "ff0107f60dbddec82d7d7feacd1c9a3ff9ab4a51",
  "tree": "0590f67ac2b1e9266a6b0cf4fbc144d3f9f69b00",
  "parents": [
    "b8c2a4eb0c47b633096f5c428b70607e7bf8d570"
  ],
  "author": {
    "name": "Yunqing Wang",
    "email": "yunqingwang@google.com",
    "time": "Wed Jan 06 18:27:37 2016 -0800"
  },
  "committer": {
    "name": "Yunqing Wang",
    "email": "yunqingwang@google.com",
    "time": "Fri Jan 08 11:59:49 2016 -0800"
  },
  "message": "Amend and improve VP8 multithreading implementation\n\nThere are flaws in current implementation of VP8 multithreading encoder\nand decoder as reported in the following issue:\nhttps://code.google.com/p/chromium/issues/detail?id\u003d158922\n\nAlthough the data race warnings are harmless, and wouldn\u0027t cause real\nproblems while encoding and decoding videos, it is better to fix the\nwarnings so that VP8 code could pass the TSan test.\n\nTo synchronize the thread-shared data access and maintain the speed\n(i.e. decoding speed), use multiple mutexes based on mb_rows to reduce\nthe number of synchronizations needed, make the reads and writes of\nthe shared data protected, and reduce the number of mb_col writes by\nnsync times.\n\nThe decoder speed tests showed \u003c 3% speed loss while using 2 ~ 4\nthreads.\n\nChange-Id: Ie296defffcd86a693188b668270d811964227882\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "01c82dbb805b8fff75636bcb9ff8a464f4c95088",
      "old_mode": 33188,
      "old_path": "vp8/common/threading.h",
      "new_id": "b2e6ded3d89aff30279beecef21b31abbe0df0ce",
      "new_mode": 33188,
      "new_path": "vp8/common/threading.h"
    },
    {
      "type": "modify",
      "old_id": "aa2cc57f7b18d3c180dacd83be3a417746192b95",
      "old_mode": 33188,
      "old_path": "vp8/decoder/onyxd_int.h",
      "new_id": "313fe01c0773dfbfa9c2866267c73877e9ec7ebb",
      "new_mode": 33188,
      "new_path": "vp8/decoder/onyxd_int.h"
    },
    {
      "type": "modify",
      "old_id": "7c7184c78aab5e8fd65be4dd0b60361e8dad15ad",
      "old_mode": 33188,
      "old_path": "vp8/decoder/threading.c",
      "new_id": "97979e3b2fd005aab0975d70227715f858fa60d8",
      "new_mode": 33188,
      "new_path": "vp8/decoder/threading.c"
    },
    {
      "type": "modify",
      "old_id": "b0aaa2f0bf0cf7ff8c339353692c0a9055306909",
      "old_mode": 33188,
      "old_path": "vp8/encoder/encodeframe.c",
      "new_id": "9b05cd1fcd0371489ff4e4195cd3602e546bec19",
      "new_mode": 33188,
      "new_path": "vp8/encoder/encodeframe.c"
    },
    {
      "type": "modify",
      "old_id": "4e234ccd58bf2618955d97a334dd4f40cf748191",
      "old_mode": 33188,
      "old_path": "vp8/encoder/ethreading.c",
      "new_id": "4f689c4bc7ea37a9e19f8256d3811702bf46eed1",
      "new_mode": 33188,
      "new_path": "vp8/encoder/ethreading.c"
    },
    {
      "type": "modify",
      "old_id": "df5bcf68836480180cf60fe9a020f0466c5458c9",
      "old_mode": 33188,
      "old_path": "vp8/encoder/onyx_if.c",
      "new_id": "5a4b37dcff176a5a503428f3966712e0f8ae7cf2",
      "new_mode": 33188,
      "new_path": "vp8/encoder/onyx_if.c"
    },
    {
      "type": "modify",
      "old_id": "317e4b9e476aabf8ebdd3eac8843bf46de0b43c7",
      "old_mode": 33188,
      "old_path": "vp8/encoder/onyx_int.h",
      "new_id": "2b2f7a0a9ae77afd9ea9d92aad0165c0a54c0885",
      "new_mode": 33188,
      "new_path": "vp8/encoder/onyx_int.h"
    }
  ]
}
