#pragma once

#if DEBUG_LEVEL >= 3
	#undef USE_ACTIVE_PROFILE			// Disables trace activity
	#define USE_TIME_ANALYSIS			// Enables trace time statistics
	#undef USE_TRACE_LOG				// Disables logging functions
	#define USE_FPU_ANALYSIS			// Enables entity FPU checks
	#define USE_MEMORY_ANALYSIS			// Enables heap statistics
	#undef USE_EVENT_STATISTICS      	// Disables event statistics
#elif DEBUG_LEVEL == 2
	#undef USE_ACTIVE_PROFILE			// Disables trace activity
	#define USE_TIME_ANALYSIS			// Enables trace time statistics
	#undef USE_TRACE_LOG				// Disables logging functions
	#define USE_FPU_ANALYSIS			// Enables entity FPU checks
	#define USE_MEMORY_ANALYSIS			// Enables heap statistics
	#undef USE_EVENT_STATISTICS      	// Disables event statistics
#elif DEBUG_LEVEL == 1
	#undef USE_ACTIVE_PROFILE			// Disables trace activity
	#define USE_TIME_ANALYSIS			// Enables trace time statistics
	#undef USE_TRACE_LOG				// Disables logging functions
	#define USE_FPU_ANALYSIS			// Enables entity FPU checks
	#define USE_MEMORY_ANALYSIS			// Enables heap statistics
	#undef USE_EVENT_STATISTICS      	// Disables event statistics
#elif DEBUG_LEVEL == 0
	#if defined(LAB_ONLY)
		#undef USE_ACTIVE_PROFILE		// Disables trace activity
		#define USE_TIME_ANALYSIS		// Enables trace time statistics
		#define USE_TRACE_LOG			// Enables logging functions
		#undef USE_FPU_ANALYSIS			// Disables entity FPU checks
		#undef USE_MEMORY_ANALYSIS		// Disables heap statistics
		#define USE_EVENT_STATISTICS	// Enables event statistics
	#else
		#undef USE_ACTIVE_PROFILE		// Disables trace activity
		#undef USE_TIME_ANALYSIS		// Disables trace time statistics
		#undef USE_TRACE_LOG			// Disables logging functions
		#undef USE_FPU_ANALYSIS			// Disables entity FPU checks
		#undef USE_MEMORY_ANALYSIS		// Disables heap statistics
		#undef USE_EVENT_STATISTICS		// Disables event statistics
	#endif
#endif

#if defined(USE_TIME_ANALYSIS) || defined(USE_ACTIVE_PROFILE) || defined(USE_TRACE_LOG)
	#define TRACE_ON
#endif

//
// Traces are expensive, release build should not have them
//
#if defined(TRACE_ON) && defined(LAB_ONLY)	

	#define TRACE_FOREGROUND_PROCESSING
//	#define TRACE_RENDERER_MANAGER
//	#define TRACE_PROCESS_EVENT
	#define TRACE_EVENT_COUNT

//
// Update Manager Group
//

//	#define TRACE_UPDATE_MANAGER
//	#define TRACE_UPDATE_MASTER
//	#define TRACE_UPDATE_REPLICANTS

//
// Networking Group
//

//	#define TRACE_SEND_PACKET
//	#define TRACE_ROUTE_PACKET
//	#define TRACE_LOST_DATA
//	#define TRACE_SEND_BUFFER
//
// Video Renderer group
// To see all the video renderer traces seperately, DO NOT define USE_ONE_VIDEO_TRACE
//	To see all of the video renderer on the same trace, enable the following:
//
// USE_ONE_VIDEO_TRACE
// TRACE_VIDEO_RENDERER
// TRACE_VIDEO_BECOME_INTERESTING
// TRACE_VIDEO_BECOME_UNINTERESTING
// TRACE_VIDEO_RENDERER_FRAME_DONE
//
// The time used by the above four traces will all appear on the video renderer
// trace together.  This configuration should not cause any buzzing of traces and
// should capture 100% of the video renderer's activity.
// Other video renderer traces may be enabled but will appear seperately
//
// CAUTION: Depending on the setup, TRACE_VIDEO_RENDERABLES can buzz, severly
// lengthening the video renderer profile times.  Use carefully.
//
//	#define USE_ONE_VIDEO_TRACE
//	#define TRACE_VIDEO_RENDERER
//	#define TRACE_VIDEO_BECOME_INTERESTING
//	#define TRACE_VIDEO_BECOME_UNINTERESTING
//	#define TRACE_VIDEO_RENDERER_FRAME_DONE

//	#define TRACE_VIDEO_CULL_SETUP
//	#define TRACE_VIDEO_VEHICLE_RENDERABLES
//	#define TRACE_VIDEO_ALL_RENDERABLES
//	#define TRACE_VIDEO_MECH_CULL_RENDERABLE
//	#define TRACE_VIDEO_BATCH_FLUSH
//	#define TRACE_VIDEO_LOAD_OBJECT
//	#define TRACE_VIDEO_PICKPOINT
//	#define TRACE_VIDEO_RENDERABLES
//	#define TRACE_VIDEO_CONSTRUCT_ROOT				// construct the root of
//	#define TRACE_VIDEO_FIRST_FRAME_DONE				// obsolete soon

//
// Audio renderer group
//

//	#define TRACE_AUDIO_RENDERER
//	#define TRACE_AUDIO_RENDERER_MIDI
//	#define TRACE_AUDIO_RENDERER_CREATE_OBJECTS
//	#define TRACE_AUDIO_RENDERER_DESTROY_OBJECTS
//	#define TRACE_AUDIO_RENDERER_START_HANDLER
//	#define TRACE_AUDIO_RENDERER_STOP_HANDLER
//	#define TRACE_AUDIO_RENDERER_EXECUTE
//	#define TRACE_AUDIO_RENDERER_RUNNING_SOURCES
//	#define TRACE_AUDIO_RENDERER_RUNNING_SORT
//	#define TRACE_AUDIO_RENDERER_CALCULATE_MIX
//	#define TRACE_AUDIO_RENDERER_EXECUTE_SOURCES
//	#define TRACE_AUDIO_RENDERER_DORMANT_SOURCES

//
// Gauge renderer group
//

//	#define TRACE_GAUGE_RENDERER
//	#define TRACE_SCREEN_COPY

//
// Other leftovers, these are probably obsolete, if you know ones that are, kill
// kill them off as appropriate.
//

	#if 0
		#define TRACE_COMPLETE_CYCLES
		#define TRACE_DEATH_ROW

		#define TRACE_EXECUTE_ENTITY
		#define TRACE_PERFORM_ENTITY
		#define TRACE_PERFORM_SUBSYSTEMS
		#define TRACE_EXECUTE_WATCHERS

		#define TRACE_RIO_RECEIVE_PACKET
		#define TRACE_RIO_SEND_PACKET
		#define TRACE_CHECK_BUFFERS
		#define TRACE_CALL_NETNUB
	#endif
#endif
