summaryrefslogtreecommitdiffstats
path: root/skia
diff options
context:
space:
mode:
Diffstat (limited to 'skia')
-rw-r--r--skia/BUILD.gn4
-rw-r--r--skia/config/sk_ref_cnt_ext_debug.h14
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 {