All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions
QGpCoreTools::AllocatedCacheItem Class Reference

#include <Cache.h>

List of all members.

Public Member Functions

void add (const CacheItem *sig)
 AllocatedCacheItem ()
const CacheItembestToFree ()
void clear ()
int count () const
QString humanInfo () const
void remove (const CacheItem *sig)
 ~AllocatedCacheItem ()

Constructor & Destructor Documentation

{}
{}

Member Function Documentation

void QGpCoreTools::AllocatedCacheItem::add ( const CacheItem sig) [inline]

Referenced by QGpCoreTools::Cache::makeAvailable().

{append(sig);}

Returns the best item to free. It is either according to current CacheProcess or to last time items were touched in case of equality for the first criterium.

References QGpCoreTools::CacheItem::nextPredictedTime(), and TRACE.

{
  TRACE;
  const CacheItem * bestItem=0;
  quint64 bestPredicted=0;
  quint64 bestAccess=0;
  quint64 t;
  for(iterator it=begin();it!=end();++it) {
    const CacheItem * item=*it;
    if(item->_dataLock.tryLock()) {
      if(item->_lockCount<2) {  // Only the one of this try, hence not locked elsewhere
        t=item->nextPredictedTime();
        if(t>bestPredicted) {
          if(bestItem) bestItem->_dataLock.unlock();
          bestItem=item;
          bestPredicted=t;
          bestAccess=item->_lastAccess;
        } else if(t==bestPredicted) {
          t=item->_lastAccess;
          if(t<bestAccess) {
            if(bestItem) bestItem->_dataLock.unlock();
            bestItem=item;
            bestAccess=t;
          } else {
            item->_dataLock.unlock();
          }
        } else {
          item->_dataLock.unlock();
        }
      } else {
        item->_dataLock.unlock();
      }
    }
  }
  return bestItem;
}

Referenced by humanInfo().

Print information about allocated blocks (may be useful for checking memory usage of processes)

References count(), QGpCoreTools::CacheItem::dataSize(), QGpCoreTools::tr(), and TRACE.

Referenced by QGpCoreTools::Cache::enlarge(), and QGpCoreTools::Cache::makeAvailable().

{
  TRACE;
  int sizeBlocks=0, sizeLockedBlocks=0, countLockedBlocks=0;
  for(const_iterator it=begin();it!=end();++it) {
    const CacheItem& item=**it;
    sizeBlocks+=item.dataSize();
    if(item._dataLock.tryLock()) {
      if(item._lockCount>1) { // Not only the one of this try, hence locked elsewhere
        sizeLockedBlocks+=item.dataSize();
        countLockedBlocks++;
      }
      item._dataLock.unlock();
    }
  }
  return tr("%1 allocated blocks (%2 Mb), %3 locked blocks (%4 Mb)\n")
         .arg(count()).arg(sizeBlocks >> 20).arg(countLockedBlocks).arg(sizeLockedBlocks >> 20);
}
void QGpCoreTools::AllocatedCacheItem::remove ( const CacheItem sig) [inline]

Referenced by QGpCoreTools::Cache::free().

{removeAt(indexOf(sig));}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines