diff options
Diffstat (limited to 'skia')
-rw-r--r-- | skia/BUILD.gn | 4 | ||||
-rw-r--r-- | skia/config/sk_ref_cnt_ext_debug.h | 14 |
2 files changed, 15 insertions, 3 deletions
diff --git a/skia/BUILD.gn b/skia/BUILD.gn index 3403417..1b38d80 100644 --- a/skia/BUILD.gn +++ b/skia/BUILD.gn @@ -278,6 +278,9 @@ config("skia_library_config") { component("skia") { sources = [ # Chrome sources. + "config/SkUserConfig.h", + "config/sk_ref_cnt_ext_debug.h", + "config/sk_ref_cnt_ext_release.h", "ext/SkDiscardableMemory_chrome.cc", "ext/SkMemory_new_handler.cpp", "ext/analysis_canvas.cc", @@ -441,6 +444,7 @@ component("skia") { configs -= [ "//build/config/compiler:chromium_code" ] configs += [ + ":skia_config", ":skia_library_config", "//build/config/compiler:no_chromium_code", ] diff --git a/skia/config/sk_ref_cnt_ext_debug.h b/skia/config/sk_ref_cnt_ext_debug.h index b2b66ad..78a39a3 100644 --- a/skia/config/sk_ref_cnt_ext_debug.h +++ b/skia/config/sk_ref_cnt_ext_debug.h @@ -9,23 +9,31 @@ #error Only one SkRefCnt should be used. #endif +#include <atomic> + // Alternate implementation of SkRefCnt for Chromium debug builds class SK_API SkRefCnt : public SkRefCntBase { public: - SkRefCnt() : flags_(0) {} - void ref() const { SkASSERT(flags_ != AdoptionRequired_Flag); SkRefCntBase::ref(); } + SkRefCnt(); + ~SkRefCnt() override; + void ref() const { SkASSERT(flags_.load() != AdoptionRequired_Flag); SkRefCntBase::ref(); } void adopted() const { flags_ |= Adopted_Flag; } void requireAdoption() const { flags_ |= AdoptionRequired_Flag; } void deref() const { SkRefCntBase::unref(); } private: + enum { Adopted_Flag = 0x1, AdoptionRequired_Flag = 0x2, }; - mutable int flags_; + mutable std::atomic<int> flags_; }; +inline SkRefCnt::SkRefCnt() : flags_(0) { } + +inline SkRefCnt::~SkRefCnt() { } + // Bootstrap for Blink's WTF::RefPtr namespace WTF { |