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

          Line data    Source code
       1             : /*
       2             :  * Copyright 2014 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             : #include "GrGpuResourceRef.h"
       9             : 
      10           0 : GrGpuResourceRef::GrGpuResourceRef() {
      11           0 :     fResource = nullptr;
      12           0 :     fOwnRef = false;
      13           0 :     fPendingIO = false;
      14           0 : }
      15             : 
      16           0 : GrGpuResourceRef::GrGpuResourceRef(GrGpuResource* resource, GrIOType ioType) {
      17           0 :     fResource = nullptr;
      18           0 :     fOwnRef = false;
      19           0 :     fPendingIO = false;
      20           0 :     this->setResource(resource, ioType);
      21           0 : }
      22             : 
      23           0 : GrGpuResourceRef::~GrGpuResourceRef() {
      24           0 :     if (fOwnRef) {
      25           0 :         SkASSERT(fResource);
      26           0 :         fResource->unref();
      27             :     }
      28           0 :     if (fPendingIO) {
      29           0 :         switch (fIOType) {
      30             :             case kRead_GrIOType:
      31           0 :                 fResource->completedRead();
      32           0 :                 break;
      33             :             case kWrite_GrIOType:
      34           0 :                 fResource->completedWrite();
      35           0 :                 break;
      36             :             case kRW_GrIOType:
      37           0 :                 fResource->completedRead();
      38           0 :                 fResource->completedWrite();
      39           0 :                 break;
      40             :         }
      41             :     }
      42           0 : }
      43             : 
      44           0 : void GrGpuResourceRef::reset() {
      45           0 :     SkASSERT(!fPendingIO);
      46           0 :     SkASSERT(SkToBool(fResource) == fOwnRef);
      47           0 :     if (fOwnRef) {
      48           0 :         fResource->unref();
      49           0 :         fOwnRef = false;
      50           0 :         fResource = nullptr;
      51             :     }
      52           0 : }
      53             : 
      54           0 : void GrGpuResourceRef::setResource(GrGpuResource* resource, GrIOType ioType) {
      55           0 :     SkASSERT(!fPendingIO);
      56           0 :     SkASSERT(SkToBool(fResource) == fOwnRef);
      57           0 :     SkSafeUnref(fResource);
      58           0 :     if (nullptr == resource) {
      59           0 :         fResource = nullptr;
      60           0 :         fOwnRef = false;
      61             :     } else {
      62           0 :         fResource = resource;
      63           0 :         fOwnRef = true;
      64           0 :         fIOType = ioType;
      65             :     }
      66           0 : }
      67             : 
      68           0 : void GrGpuResourceRef::markPendingIO() const {
      69             :     // This should only be called when the owning GrProgramElement gets its first
      70             :     // pendingExecution ref.
      71           0 :     SkASSERT(!fPendingIO);
      72           0 :     SkASSERT(fResource);
      73           0 :     fPendingIO = true;
      74           0 :     switch (fIOType) {
      75             :         case kRead_GrIOType:
      76           0 :             fResource->addPendingRead();
      77           0 :             break;
      78             :         case kWrite_GrIOType:
      79           0 :             fResource->addPendingWrite();
      80           0 :             break;
      81             :         case kRW_GrIOType:
      82           0 :             fResource->addPendingRead();
      83           0 :             fResource->addPendingWrite();
      84           0 :             break;
      85             :     }
      86           0 : }
      87             : 
      88           0 : void GrGpuResourceRef::pendingIOComplete() const {
      89             :     // This should only be called when the owner's pending executions have ocurred but it is still
      90             :     // reffed.
      91           0 :     SkASSERT(fOwnRef);
      92           0 :     SkASSERT(fPendingIO);
      93           0 :     switch (fIOType) {
      94             :         case kRead_GrIOType:
      95           0 :             fResource->completedRead();
      96           0 :             break;
      97             :         case kWrite_GrIOType:
      98           0 :             fResource->completedWrite();
      99           0 :             break;
     100             :         case kRW_GrIOType:
     101           0 :             fResource->completedRead();
     102           0 :             fResource->completedWrite();
     103           0 :             break;
     104             : 
     105             :     }
     106           0 :     fPendingIO = false;
     107           0 : }
     108             : 
     109           0 : void GrGpuResourceRef::removeRef() const {
     110             :     // This should only be called once, when the owners last ref goes away and
     111             :     // there is a pending execution.
     112           0 :     SkASSERT(fOwnRef);
     113           0 :     SkASSERT(fPendingIO);
     114           0 :     SkASSERT(fResource);
     115           0 :     fResource->unref();
     116           0 :     fOwnRef = false;
     117           0 : }

Generated by: LCOV version 1.13