aboutsummaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorGravatar mtklein <mtklein@google.com>2014-07-08 14:06:46 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-07-08 14:06:46 -0700
commitd3f3e5895efb5edfd838ba9127093c804f9dbc12 (patch)
treed96b928e7df21e36272d4b579d96d7728e56b70a /include
parent7b17547bc85df9b3c7738fd55c378151b839e304 (diff)
Reason for revert: hidden symbol 'AnnotateBenignRaceSized' in obj/base/third_party/dynamic_annotations/libdynamic_annotations.a(obj/base/third_party/dynamic_annotations/dynamic_annotations.dynamic_annotations.o) is referenced by DSO lib/libblink_platform.so Original issue's description: > Add SkRacy > > SkRacy<T> is a zero-overhead wrapper for a T, except it also > silences race warnings when TSAN is running. > > Here we apply in several classes. In SkMatrix and SkPathRef, > we use it to opportunistically cache some idempotent work. > > In SkPixelRef, we wrap the genIDs. We think the worst that > can happen here is we'll increment the global next-genID a > few times instead of once when we go to get another ID. > > BUG=skia: > > Committed: https://skia.googlesource.com/skia/+/d5e3e6ae1b3434ad1158f441902ff65f1eeaa3a7 R=reed@google.com, mtklein@chromium.org TBR=mtklein@chromium.org, reed@google.com NOTREECHECKS=true NOTRY=true BUG=skia: Author: mtklein@google.com Review URL: https://codereview.chromium.org/377693005
Diffstat (limited to 'include')
-rw-r--r--include/core/SkDynamicAnnotations.h38
-rw-r--r--include/core/SkMatrix.h5
-rw-r--r--include/core/SkPathRef.h16
-rw-r--r--include/core/SkPixelRef.h5
4 files changed, 11 insertions, 53 deletions
diff --git a/include/core/SkDynamicAnnotations.h b/include/core/SkDynamicAnnotations.h
index f9a80a31ef..6d21cddb94 100644
--- a/include/core/SkDynamicAnnotations.h
+++ b/include/core/SkDynamicAnnotations.h
@@ -19,8 +19,6 @@ extern "C" {
// TSAN provides these hooks.
void AnnotateIgnoreReadsBegin(const char* file, int line);
void AnnotateIgnoreReadsEnd(const char* file, int line);
-void AnnotateBenignRaceSized(const char* file, int line,
- const void* addr, long size, const char* desc);
} // extern "C"
// SK_ANNOTATE_UNPROTECTED_READ can wrap any variable read to tell TSAN to ignore that it appears to
@@ -39,46 +37,10 @@ inline T SK_ANNOTATE_UNPROTECTED_READ(const volatile T& x) {
return read;
}
-// Ignore racy reads and racy writes to this pointer, indefinitely.
-// If at all possible, use the more precise SK_ANNOTATE_UNPROTECTED_READ.
-template <typename T>
-void SK_ANNOTATE_BENIGN_RACE(T* ptr) {
- AnnotateBenignRaceSized(__FILE__, __LINE__, ptr, sizeof(*ptr), "SK_ANNOTATE_BENIGN_RACE");
-}
-
#else // !DYNAMIC_ANNOTATIONS_ENABLED
#define SK_ANNOTATE_UNPROTECTED_READ(x) (x)
-#define SK_ANNOTATE_BENIGN_RACE(ptr)
#endif
-// Can be used to wrap values that are intentionally racy, usually small mutable cached values, e.g.
-// - SkMatrix type mask
-// - SkPathRef bounds
-// - SkPixelRef genIDs
-template <typename T>
-class SkTRacy {
-public:
- SkTRacy() { SK_ANNOTATE_BENIGN_RACE(&fVal); }
-
- operator const T&() const {
- return fVal;
- }
-
- SkTRacy& operator=(const T& val) {
- fVal = val;
- return *this;
- }
-
- const T* get() const { return &fVal; }
- T* get() { return &fVal; }
-
- const T* operator->() const { return &fVal; }
- T* operator->() { return &fVal; }
-
-private:
- T fVal;
-};
-
#endif//SkDynamicAnnotations_DEFINED
diff --git a/include/core/SkMatrix.h b/include/core/SkMatrix.h
index bfa03de7c5..84d1a87e95 100644
--- a/include/core/SkMatrix.h
+++ b/include/core/SkMatrix.h
@@ -10,7 +10,6 @@
#ifndef SkMatrix_DEFINED
#define SkMatrix_DEFINED
-#include "SkDynamicAnnotations.h"
#include "SkRect.h"
class SkString;
@@ -644,7 +643,7 @@ private:
};
SkScalar fMat[9];
- mutable SkTRacy<uint32_t> fTypeMask;
+ mutable uint32_t fTypeMask;
uint8_t computeTypeMask() const;
uint8_t computePerspectiveTypeMask() const;
@@ -665,7 +664,7 @@ private:
void clearTypeMask(int mask) {
// only allow a valid mask
SkASSERT((mask & kAllMasks) == mask);
- fTypeMask = fTypeMask & ~mask;
+ fTypeMask &= ~mask;
}
TypeMask getPerspectiveTypeMaskOnly() const {
diff --git a/include/core/SkPathRef.h b/include/core/SkPathRef.h
index 7ce2d8d319..47a69b7e73 100644
--- a/include/core/SkPathRef.h
+++ b/include/core/SkPathRef.h
@@ -9,7 +9,6 @@
#ifndef SkPathRef_DEFINED
#define SkPathRef_DEFINED
-#include "SkDynamicAnnotations.h"
#include "SkMatrix.h"
#include "SkPoint.h"
#include "SkRect.h"
@@ -293,7 +292,7 @@ private:
SkDEBUGCODE(this->validate();)
SkASSERT(fBoundsIsDirty);
- fIsFinite = ComputePtBounds(fBounds.get(), *this);
+ fIsFinite = ComputePtBounds(&fBounds, *this);
fBoundsIsDirty = false;
}
@@ -301,7 +300,7 @@ private:
SkASSERT(rect.fLeft <= rect.fRight && rect.fTop <= rect.fBottom);
fBounds = rect;
fBoundsIsDirty = false;
- fIsFinite = fBounds->isFinite();
+ fIsFinite = fBounds.isFinite();
}
/** Makes additional room but does not change the counts or change the genID */
@@ -433,12 +432,11 @@ private:
kMinSize = 256,
};
- mutable SkTRacy<SkRect> fBounds;
- mutable SkTRacy<uint8_t> fBoundsIsDirty;
- mutable SkTRacy<SkBool8> fIsFinite; // only meaningful if bounds are valid
-
- SkBool8 fIsOval;
- uint8_t fSegmentMask;
+ mutable SkRect fBounds;
+ uint8_t fSegmentMask;
+ mutable uint8_t fBoundsIsDirty;
+ mutable SkBool8 fIsFinite; // only meaningful if bounds are valid
+ mutable SkBool8 fIsOval;
SkPoint* fPoints; // points to begining of the allocation
uint8_t* fVerbs; // points just past the end of the allocation (verbs grow backwards)
diff --git a/include/core/SkPixelRef.h b/include/core/SkPixelRef.h
index 263145ba3d..a997993eb1 100644
--- a/include/core/SkPixelRef.h
+++ b/include/core/SkPixelRef.h
@@ -9,7 +9,6 @@
#define SkPixelRef_DEFINED
#include "SkBitmap.h"
-#include "SkDynamicAnnotations.h"
#include "SkRefCnt.h"
#include "SkString.h"
#include "SkFlattenable.h"
@@ -350,8 +349,8 @@ private:
LockRec fRec;
int fLockCount;
- mutable SkTRacy<uint32_t> fGenerationID;
- mutable SkTRacy<bool> fUniqueGenerationID;
+ mutable uint32_t fGenerationID;
+ mutable bool fUniqueGenerationID;
SkTDArray<GenIDChangeListener*> fGenIDChangeListeners; // pointers are owned