// Copyright (c) 2003-2010 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
// Window server panics
//
//
#ifndef __PANICS_H__
#define __PANICS_H__
#include <e32def.h>
#include <e32cmn.h>
enum TWservPanic
{
EWsPanicTemp = 0, // Used for panics that aren't intended to be left in the code
EWsPanicInvalidInvalidArea = 1,
EWsPanicArea = 2,
EWsPanicRegion = 3,
EWsPanicQueueUpdateCount = 4,
EWsPanicUnknownCaptureKey = 5,
EWsPanicInvalidCursorType = 6,
EWsPanicInvalidRegion = 7,
EWsPanicInvalidArea = 8,
EWsPanicTextCursorFocus = 9,
EWsPanicWindowType = 10,
EWsPanicRootCommand = 11,
EWsPanicWindowCheck = 12,
EWsPanicFailedToInitialise = 13,
EWsPanicBadActiveGcList = 14,
//EWsPanicShadowLockingError = 15,
EWsPanicBackupRegion = 16,
EWsPanicKeyRepeat = 17 ,
EWsPanicErrorInRegion = 18,
EWsPanicRedrawQueueError = 19,
EWsPanicRegionErrorCheck = 20, // NOT USED
EWsPanicPointerRepeatTimerStatus = 21,
EWsPanicCheckEventQueue = 22,
EWsPanicEventQueueCopy = 23,
EWsPanicFontCacheCount = 24,
//EWsPanicNegativeShadow = 25,
EWsPanicPointerClaimGrab = 26,
EWsPanicPointerCursorAccessCount = 27,
EWsPanicSetOrdinalPos = 28,
EWsPanicGcStructSizeError = 29,
EWsPanicPointerTimer = 30,
EWsPanicNullDeviceHandle = 31, //A function returned a NULL device handle unexpectantly
EWsPanicColorModeInconsitency = 32, //Logic error while analysing the nature of Color Modes
EWsPanicCurrentlyFaded = 33, //Should not do while window is fadded
EWsPanicEventType = 34, //Must be a pointer event
EWsPanicObjectIndexError = 35, //Object being removed has wrong type
EWsPanicAnimHasNoWindow = 36, //This AnimDLL function needs the Anim to have a window
EWsPanicSpriteAlreadyActive = 37, //An attempt to activate an active sprite
EWsPanicAlreadyHaveBackup = 38, //Getting backup behind when already got it
EWsPanicSpriteHiddenCount = 39, //The Sprite's hidden count is inconsistent with the action being performed on it
EWsPanicRawEventsTypeChanged = 40, //Changes to the Raw Event Type List will probably break this code
EWsPanicEventHandlerInconsistency = 41, //The number of things claiming to be event handlers doesn't make sence
EWsPanicBackupStateError = 42, //Something has gone wrong with the state of the Backup classes
EWsPanicRegionNull = 43, //A region shouldn't be NULL or set to the nullRegion at this point
//EWsPanicShadowError = 44, //The shadows have not be updated correctly
EWsPanicDirectScreenAccess = 45, //Error in the state machine of or logic error in Direct Screen Access code
EWsPanicClickPluginNotLoaded = 46, //Trying to call function in Click PlugIn when there isn't one loaded
EWsPanicChangeClickPlugin = 47, //Trying to change keyclick plugin when it's fixed
EWsPanicInvalidScreenSizeMode = 48, //The current screen size mode is one that does not exist
EWsPanicDrawCommandsBufferCorrupt = 49, //The draw commands buffer contains some inconsistent information
EWsPanicDrawCommandsInvalidState = 50, //The draw commands state doesn't match with the action that is occuring
EWsPanicDrawCommandsNullSession = 51, //Session NULL when it shouldn't be
EWsPanicBitmapOpcodeInvalid = 52, //At least one of the bitmap opcodes is invalid
EWsPanicNoDisplayModeFound = 53, //No display mode has been found when creating the off-screen bitmap
EWsCreatedOffScreenBitmapInWrongDimensions = 54, //There is not enough memory to swap the width and the height as the bitmap was not created with the right dimensions
EWsFailedToAllocateForOffScreenBitmapDevice = 55, //Couldn't allocate memory for the device after deleting it
EWsPanicTransparentInvalidState = 56, //Something required for transparency is not available
EWsPanicBadDescriptor = 57, //The descriptor has been badly constructed
EWsPanicAlphaBlendBadParams = 58, //Bad parameters were passed in our call to the Alpha Blending function
EWsPanicInvalidMessageHandle = 59, //The current screen size mode is one that does not exist
EWsPanicWindowNull = 60, //Window handle NULL when it shouldn't be
EWsPanicPanicFlagError = 61, //The panic flag setting is inconsistent with other information
EWsPanicGCDrawingToWrongDevice = 62, //The device a GC is drawing to has been changed unexpectantly.
EWsPanicScreenInformationError = 63, //Conflict between number of screens defined in INI file and HAL
EWsPanicGroupWindowChainError = 64, //An error has occured in the group window chain algorithms
EWsPanicNoScreen = 65, //There is no screen when there should be one
EWsPanicWrongNumberBitmapDevices = 66, //The number of OSB bitmap devices does not match the number of screen modes
EWsPanicHiddenInvalidError = 67, //The Hidden Invalid contains area outside of the FullRect of the window
EWsPanicWsGraphic = 68, //An issue in internal state in the CWsGraphicDrawer mechanisms, thrown in debug builds only
EWsPanicOffScreenBitmapMissing = 69, //Found an unexpected NULL pointer to an OffScreenBitmap
EWsPanicGCDrawRegionError = 70,//NOT USED//A logic error in the code to decide which region to be drawing too
EWsPanicFailedToSetThread = 71, //Setting wserv thread to system permananent is failed
EWsPanicAnimationNotScheduled = 72, //Animation ran when not scheduled
EWsPanicAnimationAlreadyAnimating = 73, //Animation already marked as animating
EWsPanicSpriteBitmapSizeChange = 74, //A sprite member bitmap has been made larger, since the sprite was activated, without calling UpdateMember
EWsPanicMsgQueueError = 75, //Error occurs if inactive message queue doesn't have expected number of messages
EWsPanicRedrawRegionArrayEmpty = 76, //Trying to retrieve the current redraw region when the redraw region array is empty
EWsPanicIllegalInvalidArea = 77, //Invalid area includes region outside visible area of the window.
// EWsPanicTransparencyManagerNotFreed = 78, // incorrect session shutdown
// EWsPanicFailedToSetProcess = 79, //For future extention
EWsPanicDebugRegionMemoryLeak = 80, //Panic code for RRegionWserv memory leak
EWsPanicDefaultHotKeyNotFound = 81, //Default hot key was not found
// EWsPanicInvalidRedrawStoreDiscardParameter = 82, // Invalid parameter specified for redraw store discard detection algorithm.
// EWsPanicOverflowRedrawStoreDiscardParameter = 83, // Parameter specified for redraw store discard detection algorithm will cause overflow.
EwsPanicDisplayModeNotSupported = 84, //Display mode is not supported by screen
EWsPanicCommandBufferStillBeingProcessed = 85, //Previous command buffer still being processed when another one arrives
EWsPanicNullClientMessage = 86, //Processing a client message that is NULL
EWsPanicNoWindowElement = 87, //Element not found for window
EWsPanicInvalidNotificationFlag = 88, //Invalid Notification event
EWsPanicNotificationTableIsNull = 89, //Notification table is unexpectedly NULL
EWsPanicInvalidOperation = 90, //An internal use of an operation was invalid
EWsPanicCompositionNotSupported = 91, //An attempt to use compositor on a screen which doesn't support it XXX UNUSED??
EWsPanicCompositionErrorIgnored = 92, //In release the composition error would have been ignored. Occurs in debug builds only. XXX UNUSED??
EWsPanicExpectedSurfaceChange = 93, //Surfaces returned by different screen devices unexpectedly match
EWsPanicSurfaceMapError = 94, //There was a problem when unregistering a surface from the registered surface map.
EWsPanicScheduledRedraw = 95, //Something went horribly wrong in the redraw scheduling code
EWsPanicRedrawSegmentsInvalidState = 96, //The redraw segments are in a state they should never be able to reach
EWsPanicMemoryManager = 97, //The memory manager encountered an inconsistant environment somehow
EWsPanicAccessList = 98, //The access list is invalid
EWsPanicScreenFallback = 99, //The screens low memory fallback system has failed
EWsPanicActiveScheduler = 100, //The active scheduler encountered an inconsistant environment somehow
EWsPanicDrawFailure = 101, //A draw function which can't leave left
EWsPanicMemoryLock = 102, //The memory lock/unlock for memory management failed
EWsPanicRecycleElement = 103, //No element to recycle
EWsPanicUnexpectedOpacity = 104, //Unexpected opacity being set on a window
EWsPanicMaxPointersOutOfRange = 105, //HALData::EPointerMaxPointers is out of range
EWsPanicMaxPointersInconsistent = 106, //HALData::EPointerMaxPointers is inconsistent with TXYInputType reported by HAL
EWsPanicPointer3DInconsistent = 107, //HALData::EPointer3D is inconsistent with TXYInputType reported by HAL
EWsPanicProxThresholdsInconsist = 108, //HALData::EPointer3DEnterCloseProximityThreshold is settable, but EPointer3DExitCloseProximityThreshold is not
EWsPanicPressThresholdsInconsist = 109, //HALData::EPointer3DEnterHighPressureThreshold is settable, EPointer3DExitHighPressureThreshold is not
EWsPanicScreenDeviceMissing = 110, //Can't find an instance of MWsScreenDevice
EWsPanicSceneMissing = 111, //Can't find an instance of MWsScene
EWsPanicNoRenderStagePipeline = 112, //Failed to create/connect the render stage pipeline
EWsPanicInvalidChromaKeyColor = 113, //Chroma key color has to be fully opaque
EWsPanicTextCursorInterfaceMissing = 114, //The interface in the Render Stage to support Text Cursors is missing
EWsPanicSceneErrorIgnored = 115, //In release the scene error would have been ignored. Occurs in debug builds only.
EWsPanicNoDisplayControl = 116, //Display control expected
EWsPanicVisibleRegionTracking = 117,
EWsPanicNoChangetracking = 118, //CHANGETRACKING mode is expected to be set
EWsPanicNoSprite = 119,
EWsPanicAnim = 120,
EWsPanicFloatingSprite = 121,
EWsPanicRenderstageAPIs = 122,
EWsPanicBitmapArrayNotEmpty = 123, //Bitmap array is not empty, when it is expected to be empty
EWsPanicCounterValue = 124, //Counter value is not the expected one
EWsPanicUnexpectedBitmapHandleInArray = 125, //Bitmap handle in array with no matching bitmap object in bitmap ref array
EWsPanicBitmapNotFound = 126, //Failed to find a bitmap in the bitmap ref array
EWsPanicInvalidRotation = 127, //Invalid rotation used
EWsPanicInvalidPointerOffset = 128, //The pointer offset value in wsini.ini is invalid.
EWsPanicArrayInsertFailed = 129, //Array insert failed.
EWsPanicCompleteNullMessage = 130, //RMessage2 is NULL prior to calling Complete().
};
void Panic(TWservPanic aPanic);
void PanicWithInfo(TWservPanic aPanic, const TDesC& aFileName, const TDesC& aPanicName, TInt aLine);
void PanicWithCondAndInfo(TWservPanic aPanic, const TDesC& aCondition, const TDesC& aFileName, const TDesC& aPanicName, TInt aLine);
// helper macros
#define WS_ASSERT_FILENAME(f) _LIT(KPanicFileName, f);
#define WS_ASSERT_PANICNAME(p) _LIT(KPanicEnum ## p, # p);
#define WS_ASSERT_CONDITION(c) _LIT(KPanicCondition, c);
/* Use these macros for WServ server Asserts & Panics with diagnostic logging:
WS_ASSERT_ALWAYS, WS_PANIC_ALWAYS, WS_ASSERT_DEBUG and WS_PANIC_DEBUG
Note that the "do { ... } while (0)" construction forces the invocation to have a ';'
and makes the macro expansion safe in nested "if ... else ..." clauses that forget to use the
{ braces } in the Coding Standard.
*/
#define WS_ASSERT_ALWAYS(c, p) \
do { \
if (!(c)) \
{ \
WS_ASSERT_FILENAME(__FILE__); \
WS_ASSERT_PANICNAME(p); \
WS_ASSERT_CONDITION(#c); \
PanicWithCondAndInfo(p, KPanicCondition, KPanicFileName, KPanicEnum ## p, __LINE__); \
} \
} while (0)
#define WS_PANIC_ALWAYS(p) \
do { \
WS_ASSERT_FILENAME(__FILE__); \
WS_ASSERT_PANICNAME(p); \
PanicWithInfo(p, KPanicFileName, KPanicEnum ## p, __LINE__); \
} while (0)
#if defined(_DEBUG)
#define WS_ASSERT_DEBUG(c, p) \
do { \
if (!(c)) \
{ \
WS_ASSERT_FILENAME(__FILE__); \
WS_ASSERT_PANICNAME(p); \
WS_ASSERT_CONDITION(#c); \
PanicWithCondAndInfo(p, KPanicCondition, KPanicFileName, KPanicEnum ## p, __LINE__); \
} \
} while (0)
#define WS_PANIC_DEBUG(p) \
do { \
WS_ASSERT_FILENAME(__FILE__); \
WS_ASSERT_PANICNAME(p); \
PanicWithInfo(p, KPanicFileName, KPanicEnum ## p, __LINE__); \
} while (0)
#else
#define WS_ASSERT_DEBUG(c, p)
#define WS_PANIC_DEBUG(p)
#endif
#endif