debugsrv/runmodedebug/rmdriver/inc/d_debug_agent.inl
changeset 45 185201be11b0
child 56 aa2539c91954
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debugsrv/runmodedebug/rmdriver/inc/d_debug_agent.inl	Thu Sep 02 22:05:40 2010 +0300
@@ -0,0 +1,109 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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:
+// Inline methods for debug agent class
+//
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#ifndef D_DEBUG_AGENT_INL
+#define D_DEBUG_AGENT_INL
+
+
+/**
+ Checks whether the event queue is empty
+*/
+inline TBool DDebugAgent::BufferEmpty() const
+	{
+	return (NumberOfEmptySlots() == KNumberOfEventsToQueue);
+	}
+
+/**
+ Checks whether the event queue is full
+*/
+inline TBool DDebugAgent::BufferFull() const
+	{
+	return (NumberOfEmptySlots() == 0);
+	}
+
+/**
+ Checks whether there is room in the event queue to store an event
+*/
+inline TBool DDebugAgent::BufferCanStoreEvent() const
+	{
+	return (NumberOfEmptySlots() > 0);
+	}
+
+/**
+ This looks to see if the buffer is close to being full and should only
+ accept higher priority debug events (user trace is the only low priority event) 
+*/
+inline TBool DDebugAgent::BufferAtCriticalLevel() const
+	{
+	return (NumberOfEmptySlots() < KNumberOfEventsToQueue - KCriticalBufferSize);
+	}
+
+/**
+ Increments Head position, wrapping at KNumberOfEventsToQueue if necessary
+*/
+inline void DDebugAgent::IncrementHeadPosition(void)
+	{
+	iHead = (iHead + 1) % KNumberOfEventsToQueue;
+
+	iFreeSlots--;
+	}
+
+/**
+ Increments Tail position, wrapping at KNumberOfEventsToQueue if necessary
+*/
+inline void DDebugAgent::IncrementTailPosition(void)
+	{
+	iTail = (iTail + 1) % KNumberOfEventsToQueue;
+
+	iFreeSlots++;
+}
+
+/**
+ Returns the number of free slots in the event queue
+*/
+inline TInt DDebugAgent::NumberOfEmptySlots() const
+	{
+	return iFreeSlots;
+	}
+
+/**
+ Lock access to this agent's event queue
+*/
+inline void DDebugAgent::LockEventQueue(void)
+	{
+	NKern::ThreadEnterCS(); // Waiting on a semaphore is broken but this makes things marginally better.
+	// Anyone changing this, bear in mind the CS is also needed for some of the DebugUtils::OpenThreadHandle calls
+	Kern::SemaphoreWait(*iEventQueueLock);
+	}
+
+/**
+ Release the lock on this agent's event queue
+*/
+inline void DDebugAgent::UnlockEventQueue(void)
+	{
+	Kern::SemaphoreSignal(*iEventQueueLock);
+	NKern::ThreadLeaveCS();
+	}
+
+
+#endif	// D_DEBUG_AGENT_INL