)]}'
{
  "commit": "6b164c337c647c0898a0e54cdb260f0ee91ae4a6",
  "tree": "050ee4247b8bb58d4b8bb0bcb532b1c6e67e63be",
  "parents": [
    "0c5035bec3bfdd41c38b55c7880e63bea8347e43"
  ],
  "author": {
    "name": "Alexis Hetu",
    "email": "sugoi@google.com",
    "time": "Wed Sep 20 11:24:52 2017 -0400"
  },
  "committer": {
    "name": "Alexis Hétu",
    "email": "sugoi@google.com",
    "time": "Thu Sep 21 18:02:59 2017 +0000"
  },
  "message": "Use atomic operations to specify shared memory access order\n\nTSAN detected many data race errors in the SwiftShader Renderer\nclass. x86 has a strong memory ordering model which guarantees\nthat changes are observed in the same order by other threads.\nHowever, C++ does not provide such guarantees unless specified\nusing atomic operations. In order to fix these, a new AtomicInt\nclass was added which is a basically a wrapper class for\nstd::atomic\u003cint\u003e and which only exposes the portion of the API\nrequired by SwiftShader.\n\nSince std::atomic isn\u0027t available on older versions of Android,\na fallback class was implemented without using std::atomic, which\nis closer to the previous implementation. Both classes appear to\nwork properly after performing a few dEQP tests. Both also perform\nsimilarly.\n\nA few minor changes were made in order to attempt to reduce the use\nof atomic integer operations when possible.\n\nChange-Id: Ife6d3a2b6113346f8f8163b692e79c2a0e03b22f\nReviewed-on: https://swiftshader-review.googlesource.com/12308\nReviewed-by: Nicolas Capens \u003cnicolascapens@google.com\u003e\nTested-by: Nicolas Capens \u003cnicolascapens@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "87b90d120f391348e550ff3a4744d698cffd0995",
      "old_mode": 33188,
      "old_path": "src/Common/Thread.hpp",
      "new_id": "7b4e0ca527fc5227f37a2502dbdddc1981bde030",
      "new_mode": 33188,
      "new_path": "src/Common/Thread.hpp"
    },
    {
      "type": "modify",
      "old_id": "cfd859ff6dc39abfe4d7d7826ab83c89944735ed",
      "old_mode": 33188,
      "old_path": "src/Renderer/Clipper.cpp",
      "new_id": "cf3fe3cba63981e52da19c3989ce48a222bded32",
      "new_mode": 33188,
      "new_path": "src/Renderer/Clipper.cpp"
    },
    {
      "type": "modify",
      "old_id": "08696970aeb69042f62369bbb29b8b3ba6b0d91c",
      "old_mode": 33188,
      "old_path": "src/Renderer/Renderer.cpp",
      "new_id": "e918c432dac069d1eb043f1a46ffebffc4c681a8",
      "new_mode": 33188,
      "new_path": "src/Renderer/Renderer.cpp"
    },
    {
      "type": "modify",
      "old_id": "e33f828824cce0dd44fb935b3443a4ff2d2e2b52",
      "old_mode": 33188,
      "old_path": "src/Renderer/Renderer.hpp",
      "new_id": "4576d23f58206f8ae425e6b12f330c2d25da9ab5",
      "new_mode": 33188,
      "new_path": "src/Renderer/Renderer.hpp"
    },
    {
      "type": "modify",
      "old_id": "6418c0831b5236ed00a7e9c4a68cbdf114e9eab3",
      "old_mode": 33188,
      "old_path": "src/Renderer/Surface.hpp",
      "new_id": "8b3b8c56a1b5e6564b9e1b12406bda8fa1f1666c",
      "new_mode": 33188,
      "new_path": "src/Renderer/Surface.hpp"
    }
  ]
}
