blob: b2b66adba729b8110d5b285c7e30cabfaa1af426 [file] [log] [blame]
James Robinson646469d2014-10-03 15:33:28 -07001// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef SK_REF_CNT_EXT_DEBUG_H_
6#define SK_REF_CNT_EXT_DEBUG_H_
7
8#ifdef SK_REF_CNT_EXT_RELEASE_H_
9#error Only one SkRefCnt should be used.
10#endif
11
12// Alternate implementation of SkRefCnt for Chromium debug builds
13class SK_API SkRefCnt : public SkRefCntBase {
14public:
15 SkRefCnt() : flags_(0) {}
16 void ref() const { SkASSERT(flags_ != AdoptionRequired_Flag); SkRefCntBase::ref(); }
17 void adopted() const { flags_ |= Adopted_Flag; }
18 void requireAdoption() const { flags_ |= AdoptionRequired_Flag; }
19 void deref() const { SkRefCntBase::unref(); }
20private:
21 enum {
22 Adopted_Flag = 0x1,
23 AdoptionRequired_Flag = 0x2,
24 };
25
26 mutable int flags_;
27};
28
29// Bootstrap for Blink's WTF::RefPtr
30
31namespace WTF {
32 inline void adopted(const SkRefCnt* object) {
33 if (!object)
34 return;
35 object->adopted();
36 }
37 inline void requireAdoption(const SkRefCnt* object) {
38 if (!object)
39 return;
40 object->requireAdoption();
41 }
42};
43
44using WTF::adopted;
45using WTF::requireAdoption;
46
47#endif
48