Add a 'unique' method to SkRefCnt, document the usage, and add support.
authorbungeman@google.com <bungeman@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Fri, 19 Jul 2013 23:18:52 +0000 (23:18 +0000)
committerbungeman@google.com <bungeman@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Fri, 19 Jul 2013 23:18:52 +0000 (23:18 +0000)
commitf64c6842c15e1ba126639be7578e4642cb396987
tree4d7091db554b6a61ce197cbf4ff4ebc2980dbf2d
parent13388e71645caa3e223a3b024efe103f7110f1a9
Add a 'unique' method to SkRefCnt, document the usage, and add support.

std::shared_ptr has a method called 'unique' which captures the concept that
a reference count of 1 is special, and can be used to optimize copy on write.
It also has some undocumented need for memory barriers in certain situations
and those needs are documented here.

The motivation for looking into this is crbug.com/258499 . The use of the
reference count in this manner is a benign race with both ref() and unref().
By introducing sk_atomic_unprotected_read, it is possible for Chromium to
annotate this read to tell ThreadSanitizer that this is known.

R=bsalomon@google.com

Review URL: https://codereview.chromium.org/18770007

git-svn-id: http://skia.googlecode.com/svn/trunk@10221 2bbb7eff-a529-9590-31e7-b0007b416f81
include/core/SkRefCnt.h
src/core/SkPathRef.h
src/core/SkTRefArray.h
src/core/SkTypefaceCache.cpp
src/gpu/GrContext.cpp
src/gpu/GrEffect.cpp
src/gpu/GrResourceCache.cpp
src/image/SkSurface.cpp