aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/core/SkMatrix44.h
diff options
context:
space:
mode:
authorGravatar Yuqian Li <liyuqian@google.com>2018-04-30 10:06:44 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-05-03 15:56:12 +0000
commit8ba34f82dd3c881c37b9e59d3f650e2401f98d0e (patch)
tree576bc7ec871f7dab6ffc7ce50cd4d24527e96434 /include/core/SkMatrix44.h
parent16d4564c6fdaea6250bbb4d085616e42ec0ec4f2 (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.h22
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]; }