//////////////////////////////////////////////////////////////////////
//
//                             Pixie
//
// Copyright © 1999 - 2003, Okan Arikan
//
// Contact: okan@cs.berkeley.edu
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
// 
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// General Public License for more details.
// 
// You should have received a copy of the GNU General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
//
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
//
//  File				:	stats.h
//  Classes				:	CStats
//  Description			:	Holds renderer statistics
//
////////////////////////////////////////////////////////////////////////
#ifndef STATS_H
#define STATS_H

#include "common/global.h"		// The global header file

///////////////////////////////////////////////////////////////////////
// Class				:	CStats
// Description			:	Holds statistics
// Comments				:
// Date last edited		:	1/19/2001
class CStats {
public:


	void			reset();						// Reset all the stats
	void			printStats(int);				// Print the frame statistics
	void			check();						// Check we have clean shutdown


	///////////////////////////////////////////////////////////////////////////////
	//
	//	Global stats
	//
	///////////////////////////////////////////////////////////////////////////////
	int				zoneMemory;						// The current zone memory size
	int				peakZoneMemory;					// The peak zone memeory size
	int				vertexMemory;					// The current vertex memory size
	int				peakVertexMemory;				// The peak size of the vertex memory
	float			rendererStartTime;				// The time when the renderer was started
	float			rendererStartOverhead;			// The time it took to initialize the renderer
	float			rendererTime;					// The current renderer time
	int				numAttributes;					// The number of objects allocated of each type
	int				numXforms;
	int				numOptions;
	int				numShaders;
	int				numShaderInstances;
	int				numOutDevices;
	int				numGprimCores;
	int				numVariableDatas;
	int				numVertexDatas;
	int				numParameters;
	int				numParameterLists;
	int				numPls;
	int				numObjects;
	int				numGprims;
	int				numSurfaces;
	int				numPeakSurfaces;
	int				numComposites;
	int				numDelayeds;
	int				numInstances;
	int				numTextures;
	int				numEnvironments;
	int				optionsMemory;					// The amount of memory allocated for each of the following
	int				attributesMemory;
	int				xformMemory;
	int				gprimCoreMemory;
	int				gprimMemory;
	int				variableDataMemory;
	int				textureMemory;
	int				sequenceNumber;					// The sequence number
	int				runningSequenceNumber;			// The running sequence number
	int				totalNetRecv;					// The total number of bytes received over the net
	int				totalNetSend;					// The total number of bytes send over the net


	///////////////////////////////////////////////////////////////////////////////
	//
	//	Frame stats
	//
	///////////////////////////////////////////////////////////////////////////////
	float			frameStartTime;					// The time when we started rendering
	float			frameTime;						// The current frame time
	float			frameStartOverhead;				// The start overhead
	float			frameEndOverhead;				// The end overhead
	float			frameRaytracerOverhead;			// The start overhead used by the raytracer
	const	char	*activity;						// Holds the current activity being performed
	float			progress;						// The progress in the current frame
	char			frameName[64];					// The name of the current frame
	int				frameNumber;					// The number of the current frame
	int				numShaded;						// The number of shaded points
	int				numSampled;						// The number of sampled points
	int				numRasterGridsCreated;
	int				numRasterGridsShaded;
	int				numRasterGridsRendered;
	int				numPeakRasterGrids;
	int				numPeakRasterObjects;
	float			avgRasterGrids;
	float			avgRasterObjects;
	int				numObjectDeferRight;
	int				numObjectDeferBottom;
	int				numObjectOccluded;
	int				numSplits;
	int				numVsplits,numUsplits,numUVsplits;
	int				numTrianglesCreated;
	int				numTrianglesRendered;
	int				numTracedRays,numShadingRays,numShadowRays;
	int				numRayTriangles;
	int				numHierarchyLeaves,numHierarchyInternals,numHierarchyUncomputeds;
	int				numLeafItems;
	int				numTextureMisses;				// The number of texture misses
	int				transferredTextureData;			// The amount the texture data transmitted
	int				textureSize;					// The current amount of textures in the memory
	int				numPeakTextures;				// The peak number of textures
	int				numPeakEnvironments;			// The peak number of environments
	int				peakTextureSize;				// The amount of memory at the peak denoted to textures
	int				numIndirectDiffuseSamples;		// The number of final gather samples taken
	int				numOcclusionSamples;			// The number of final gather samples taken
	int				numIndirectDiffuseRays;			// The number of final gather samples taken
	int				numOcclusionRays;				// The number of final gather samples taken
	int				numIndirectDiffusePhotonmapLookups;			// The number of final gather photonmap lookups
};


extern	CStats	stats;


#endif



