FasTC/Core/include/BlockStats.h

90 lines
1.9 KiB
C
Raw Normal View History

#ifndef __BLOCK_STATS_H__
#define __BLOCK_STATS_H__
#include "TexCompTypes.h"
#include "ReferenceCounter.h"
///////////////////////////////////////////////////////////////////////////////
//
// Forward declarations
//
///////////////////////////////////////////////////////////////////////////////
class TCMutex;
///////////////////////////////////////////////////////////////////////////////
//
// class BlockStat
//
///////////////////////////////////////////////////////////////////////////////
struct BlockStat {
friend class BlockStatManager;
public:
BlockStat(const CHAR *statName, int);
BlockStat(const CHAR *statName, double stat);
BlockStat(const BlockStat &);
BlockStat &operator=(const BlockStat &);
2012-11-01 22:56:13 +00:00
2012-11-07 21:52:06 +00:00
void ToString(CHAR *buf, int bufSz) const;
private:
const enum Type {
eType_Float,
eType_Int,
kNumTypes
} m_Type;
static const int kStatNameSz = 32;
CHAR m_StatName[kStatNameSz];
union {
uint64 m_IntStat;
double m_FloatStat;
};
};
class BlockStatManager {
public:
BlockStatManager(int nBlocks);
BlockStatManager(const BlockStatManager &);
BlockStatManager &operator=(const BlockStatManager &);
~BlockStatManager();
uint32 BeginBlock();
void AddStat(uint32 blockIdx, const BlockStat &stat);
void ToFile(const CHAR *filename);
private:
class BlockStatList {
public:
BlockStatList();
~BlockStatList();
void AddStat(const BlockStat &stat);
BlockStat GetStat() const { return m_Stat; }
const BlockStatList *GetTail() const { return m_Tail; }
private:
BlockStatList(const BlockStat &stat);
BlockStatList(const BlockStatList &other);
BlockStat m_Stat;
BlockStatList *m_Tail;
ReferenceCounter m_Counter;
} *m_BlockStatList;
uint32 m_BlockStatListSz;
TCMutex *m_Mutex;
uint32 m_NextBlock;
ReferenceCounter m_Counter;
// Note: we probably shouldn't call this...
void Copy(const BlockStatManager &);
};
#endif // __BLOCK_STATS_H__