diff -r ca8a1b6995f6 -r 52e343bb8f80 debugsrv/runmodedebug/rmdriver/inc/d_debug_agent.h --- a/debugsrv/runmodedebug/rmdriver/inc/d_debug_agent.h Tue Aug 31 16:45:49 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,151 +0,0 @@ -// Copyright (c) 2006-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: -// Purpose: Kernel-side tracking of debug agent information associated -// with each process being debugged. -// -// - -#ifndef D_DEBUG_AGENT_H -#define D_DEBUG_AGENT_H - -#include -#include "d_driver_event_info.h" - -/** -* Handles events from the kernel, filters them according to the debug agent's requests, -* and signals these events to the user side in FIFO-style. -* @see TKernelEventAction -* @see TEventInfo -*/ -class DDebugAgent : public DBase - { -public: - static DDebugAgent* New(TUint64 aId); - ~DDebugAgent(); - - TInt SetEventAction(Debug::TEventType aEvent, Debug::TKernelEventAction aEventAction); - void GetEvent(TClientDataRequest* aAsyncGetValueRequest, DThread* aClientThread); - TInt EventAction(Debug::TEventType aEvent); - - TInt CancelGetEvent(void); - void NotifyEvent(const TDriverEventInfo& aEventInfo); - TUint64 Id(); - -protected: - DDebugAgent(TUint64 aId); - TInt Construct(); - -private: - void QueueEvent(const TDriverEventInfo& aEventInfo); - TBool BufferEmpty() const; - TBool BufferFull() const; - TBool BufferCanStoreEvent() const; - TBool BufferAtCriticalLevel() const; - void IncrementHeadPosition(void); - void IncrementTailPosition(void); - TInt NumberOfEmptySlots() const; - void LockEventQueue(void); - void UnlockEventQueue(void); - -private: - - TUint64 iId; - Debug::TKernelEventAction iEventActions[Debug::EEventsLast]; - - /** - * Object used to write events back to DSS thread - * @see TEventInfo - */ - TClientDataRequest* iRequestGetEventStatus; - - DThread* iClientThread; - - /** - * Ring buffer of pending events. Access to it is controlled by - * @see iEventQueueLock - */ - RArray iEventQueue; - - /** - * Ring buffer head. Points to the next empty slot in iEventQueue - * @see iEventQueue - */ - TInt iHead; - - /** - * Ring buffer tail. Points to the oldest full slot in iEventQueue - * @see iEventQueue - */ - TInt iTail; - - /** - * Control access to event queue. - * @see iEventQueue - */ - DSemaphore* iEventQueueLock; - - /** - * Keeps track of how many free slots are available in the event queue. - * @see iEventQueue - */ - TInt iFreeSlots; - - /** - * Boolean to indicate if we have told the agent that we are ignoring trace events - * @see QueueEvent - */ - TBool iIgnoringTrace; - - /** - * Used to control the delivery of events to the client so that only - * when more requests than deliveries have taken place can we deliver the - * next event - * - * Incremented when a request for event takes place - * @see GetEvent - * - * Decremented when an event is delivered. - * @see NotifyEvent - * - * Cleared when event requests are cancelled - * @see CancelGetEvent - * - */ - TInt iEventBalance; - - /** - * Length of kernel-event queue. - * This is a power of two for efficiency when using the - * remainder operator - * @see DDebugAgent::iEventQueue - */ - static const TUint KNumberOfEventsToQueue = 128; - - /** - * This determines the number of events at which we stop accepting - * low priority events into the event queue. - * @see DDebugAgent::BufferAtCriticalLevel - * @see DDebugAgent::iEventQueue - */ - static const TUint KCriticalBufferSize = 64; - - /** - * If we encounter an event that will take down the agent (eg a process critical thread crashing) - * we use this flag to stop trying to deliver thread death notifications to it. - */ - TBool iAgentDying; - }; - -#endif // D_DEBUG_AGENT_H -