diff options
author | 2018-04-30 10:06:44 -0400 | |
---|---|---|
committer | 2018-05-03 15:56:12 +0000 | |
commit | 8ba34f82dd3c881c37b9e59d3f650e2401f98d0e (patch) | |
tree | 576bc7ec871f7dab6ffc7ce50cd4d24527e96434 /include/core/SkMatrix44.h | |
parent | 16d4564c6fdaea6250bbb4d085616e42ec0ec4f2 (diff) |
Change SkMatrix44::fTypeMask to atomic
Bug: skia:7886
Change-Id: If616b8bf3b50366356b4324760ad82cbc5fd937d
Reviewed-on: https://skia-review.googlesource.com/124460
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Yuqian Li <liyuqian@google.com>
Diffstat (limited to 'include/core/SkMatrix44.h')
-rw-r--r-- | include/core/SkMatrix44.h | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/include/core/SkMatrix44.h b/include/core/SkMatrix44.h index f8b7b9547d..12004ef7d6 100644 --- a/include/core/SkMatrix44.h +++ b/include/core/SkMatrix44.h @@ -8,6 +8,8 @@ #ifndef SkMatrix44_DEFINED #define SkMatrix44_DEFINED +#include <atomic> + #include "SkMatrix.h" #include "SkScalar.h" @@ -157,7 +159,7 @@ public: SkMatrix44(const SkMatrix44& src) { memcpy(fMat, src.fMat, sizeof(fMat)); - fTypeMask = src.fTypeMask; + fTypeMask.store(src.fTypeMask, std::memory_order_relaxed); } SkMatrix44(const SkMatrix44& a, const SkMatrix44& b) { @@ -167,7 +169,7 @@ public: SkMatrix44& operator=(const SkMatrix44& src) { if (&src != this) { memcpy(fMat, src.fMat, sizeof(fMat)); - fTypeMask = src.fTypeMask; + fTypeMask.store(src.fTypeMask, std::memory_order_relaxed); } return *this; } @@ -210,11 +212,11 @@ public: * transform. */ inline TypeMask getType() const { - if (fTypeMask & kUnknown_Mask) { - fTypeMask = this->computeTypeMask(); + if (fTypeMask.load(std::memory_order_relaxed) & kUnknown_Mask) { + fTypeMask.store(this->computeTypeMask(), std::memory_order_relaxed); } SkASSERT(!(fTypeMask & kUnknown_Mask)); - return (TypeMask)fTypeMask; + return (TypeMask)fTypeMask.load(std::memory_order_relaxed); } /** @@ -454,8 +456,8 @@ public: private: /* This is indexed by [col][row]. */ - SkMScalar fMat[4][4]; - mutable unsigned fTypeMask; + SkMScalar fMat[4][4]; + mutable std::atomic<unsigned> fTypeMask; static constexpr int kUnknown_Mask = 0x80; @@ -479,12 +481,12 @@ private: int computeTypeMask() const; inline void dirtyTypeMask() { - fTypeMask = kUnknown_Mask; + fTypeMask.store(kUnknown_Mask, std::memory_order_relaxed); } inline void setTypeMask(int mask) { SkASSERT(0 == (~(kAllPublic_Masks | kUnknown_Mask) & mask)); - fTypeMask = mask; + fTypeMask.store(mask, std::memory_order_relaxed); } /** @@ -492,7 +494,7 @@ private: * we already know that this matrix is identity. */ inline bool isTriviallyIdentity() const { - return 0 == fTypeMask; + return 0 == fTypeMask.load(std::memory_order_relaxed); } inline const SkMScalar* values() const { return &fMat[0][0]; } |