LCOV - code coverage report
Current view: top level - gfx/skia/skia/src/gpu - GrNonAtomicRef.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 19 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 16 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright 2015 Google Inc.
       3             :  *
       4             :  * Use of this source code is governed by a BSD-style license that can be
       5             :  * found in the LICENSE file.
       6             :  */
       7             : 
       8             : #ifndef GrNonAtomicRef_DEFINED
       9             : #define GrNonAtomicRef_DEFINED
      10             : 
      11             : #include "SkRefCnt.h"
      12             : #include "SkTArray.h"
      13             : 
      14             : /**
      15             :  * A simple non-atomic ref used in the GrBackend when we don't want to pay for the overhead of a
      16             :  * threadsafe ref counted object
      17             :  */
      18             : template<typename TSubclass> class GrNonAtomicRef : public SkNoncopyable {
      19             : public:
      20           0 :     GrNonAtomicRef() : fRefCnt(1) {}
      21             : 
      22             : #ifdef SK_DEBUG
      23           0 :     ~GrNonAtomicRef() {
      24             :         // fRefCnt can be one when a subclass is created statically
      25           0 :         SkASSERT((0 == fRefCnt || 1 == fRefCnt));
      26             :         // Set to invalid values.
      27           0 :         fRefCnt = -10;
      28           0 :     }
      29             : #endif
      30             : 
      31           0 :     bool unique() const { return 1 == fRefCnt; }
      32             : 
      33           0 :     void ref() const {
      34             :         // Once the ref cnt reaches zero it should never be ref'ed again.
      35           0 :         SkASSERT(fRefCnt > 0);
      36           0 :         ++fRefCnt;
      37           0 :     }
      38             : 
      39           0 :     void unref() const {
      40           0 :         SkASSERT(fRefCnt > 0);
      41           0 :         --fRefCnt;
      42           0 :         if (0 == fRefCnt) {
      43           0 :             GrTDeleteNonAtomicRef(static_cast<const TSubclass*>(this));
      44           0 :             return;
      45             :         }
      46             :     }
      47             : 
      48             : private:
      49             :     mutable int32_t fRefCnt;
      50             : 
      51             :     typedef SkNoncopyable INHERITED;
      52             : };
      53             : 
      54           0 : template<typename T> inline void GrTDeleteNonAtomicRef(const T* ref) {
      55           0 :     delete ref;
      56           0 : }
      57             : 
      58             : #endif

Generated by: LCOV version 1.13