11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// found in the LICENSE file. 41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#ifndef SK_REF_CNT_EXT_DEBUG_H_ 61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define SK_REF_CNT_EXT_DEBUG_H_ 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#ifdef SK_REF_CNT_EXT_RELEASE_H_ 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#error Only one SkRefCnt should be used. 101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Alternate implementation of SkRefCnt for Chromium debug builds 131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class SK_API SkRefCnt : public SkRefCntBase { 141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)public: 151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SkRefCnt() : flags_(0) {} 161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void ref() const { SkASSERT(flags_ != AdoptionRequired_Flag); SkRefCntBase::ref(); } 171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void adopted() const { flags_ |= Adopted_Flag; } 181e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void requireAdoption() const { flags_ |= AdoptionRequired_Flag; } 191e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) void deref() const { SkRefCntBase::unref(); } 201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)private: 211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) enum { 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) Adopted_Flag = 0x1, 231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AdoptionRequired_Flag = 0x2, 241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) }; 251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) mutable int flags_; 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Bootstrap for Blink's WTF::RefPtr 301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace WTF { 321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) inline void adopted(const SkRefCnt* object) { 331e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!object) 341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return; 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) object->adopted(); 361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) inline void requireAdoption(const SkRefCnt* object) { 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (!object) 391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) return; 401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) object->requireAdoption(); 411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}; 431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)using WTF::adopted; 451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)using WTF::requireAdoption; 461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif 481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 49