memspy/MemSpyClient/inc/memspysession.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 31 Aug 2010 16:45:49 +0300
branchRCL_3
changeset 20 ca8a1b6995f6
permissions -rw-r--r--
Revision: 201033 Kit: 201035

/*
* 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 "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:
*
*/


#ifndef MEMSPYSESSION_H
#define MEMSPYSESSION_H


// System includes
#include <e32base.h>
#include <u32std.h>

//user includes
#include <memspy/api/memspyapiprocess.h>

#include <memspy/api/memspyapithread.h>
#include <memspy/api/memspyapithreadinfoitem.h>
#include <memspy/engine/memspythreadinfoitemdata.h>
#include <memspy/engine/memspyengineobjectthreadinfoobjects.h>
#include <memspy/engine/memspydevicewideoperations.h>

#include <memspy/api/memspyapikernelobject.h>

#include <memspy/api/memspyapikernelobjectitem.h> //for KernelObjectItems

#include <memspy/api/memspyapiheap.h>

#include <memspy/api/memspyapimemorytrackingcycle.h>

#include <memspyengineclientinterface.h>
#include <memspy/engine/memspyengineoutputsinktype.h>

#include <memspy/engine/memspyenginehelpersysmemtrackerconfig.h>

// Constants
const TInt KMemSpyVersion           = 2;

enum TSortType
	{
	ESortProcById,
	ESortProcByName,
	ESortProcByThreadCount,
	ESortProcByCodeSegs,
	ESortProcByHeapUsage,
	ESortProcByStackUsage
	};

enum TMemSpyOutputType
    {
    EOutputTypeDebug = 0,
    EOutputTypeFile
    };

class TMemSpyDeviceWideOperationProgress 
	{
public:
	IMPORT_C TInt Progress() const;
	IMPORT_C const TDesC& Description() const;
	
private:
	TPckgBuf<TInt> iProgress;
	TFullName iDescription;
	
friend class RMemSpySession;
	};


NONSHARABLE_CLASS( RMemSpySession ) : public RSessionBase
    {
public:
    IMPORT_C RMemSpySession();
    IMPORT_C TInt Connect();
    
public:	//API
    //Thread speciifc operations
    IMPORT_C void OutputKernelHeapDataL(); //EMemSpyClientServerOpHeapData
    
    IMPORT_C void OutputKernelHeapData(TRequestStatus& aStatus); //EMemSpyClientServerOpHeapData
    
    IMPORT_C void OutputThreadHeapDataL(TThreadId aThreadId); //EMemSpyClientServerOpHeapData
    
    IMPORT_C void OutputThreadHeapDataL(const TDesC& aThreadName); //EMemSpyClientServerOpHeapData
    
    IMPORT_C void OutputThreadCellListL(TThreadId aThreadId);//EMemSpyClientServerOpHeapCellListing    
    
    IMPORT_C void OutputHeapInfoUserL(TThreadId aThreadId);	//EMemSpyClientServerOpHeapInfo
    
    IMPORT_C void SwitchOutputSinkL( TMemSpySinkType aType); //EMemSpyClientServerOpSwitchOutputSinkFile / EMemSpyClientServerOpSwitchOutputSinkTrace
    
    IMPORT_C void SwitchOutputToTraceL(); // EMemSpyClientServerOpSwitchOutputSinkTrace
    
    IMPORT_C void SwitchOutputToFileL(const TDesC& aRootFolder); // EMemSpyClientServerOpSwitchOutputSinkFile
    
    IMPORT_C void OutputStackInfoL(TThreadId aThreadId); //EMemSpyClientServerOpStackInfo
    
    IMPORT_C void OutputStackDataL(TThreadId aThreadId, TMemSpyDriverDomainType aType ); //EMemSpyClientServerOpStackDataUser / EMemSpyClientServerOpStackDataKernel    
    
    IMPORT_C void OutputThreadInfoHandlesL(TThreadId aThreadId); //EMemSpyClientServerOpOutputInfoHandles
    
    IMPORT_C void OutputAOListL(TThreadId aId, TMemSpyThreadInfoItemType aType);	//EMemSpyClientServerOpOutputAOList    
    
    IMPORT_C void OutputKernelObjectsL();// EMemSpyClientServerOpEnumerateKernelContainerAll
    
    IMPORT_C void OutputCompactStackInfoL();// EMemSpyClientServerOpStackInfoCompact
    
    IMPORT_C void OutputCompactHeapInfoL();// EMemSpyClientServerOpHeapInfoCompact
    
    // Device Wide Operations
    // Synchronous operations - for CLI
    IMPORT_C void OutputHeapData();
    
    // Asynchronous operations
    IMPORT_C void OutputPhoneInfo(TRequestStatus& aStatus);
    
    IMPORT_C void OutputDetailedPhoneInfo(TRequestStatus& aStatus);
    
    IMPORT_C void OutputHeapInfo(TRequestStatus& aStatus);
    
    IMPORT_C void OutputCompactHeapInfo(TRequestStatus &aStatus);
    
    IMPORT_C void OutputHeapCellListing(TRequestStatus& aStatus);
    
    IMPORT_C void OutputHeapData(TRequestStatus& aStatus);
    
    IMPORT_C void OutputStackInfo(TRequestStatus& aStatus);
    
    IMPORT_C void OutputCompactStackInfo(TRequestStatus &aStatus);
    
    IMPORT_C void OutputUserStackData(TRequestStatus& aStatus);
    
    IMPORT_C void OutputKernelStackData(TRequestStatus& aStatus);
    
    IMPORT_C void NotifyDeviceWideOperationProgress(TMemSpyDeviceWideOperationProgress &aProgress, TRequestStatus &aStatus);
    
    IMPORT_C void CancelDeviceWideOperationL();
    
    // Synchronous operations for MemSpyLauncher
    IMPORT_C void OutputPhoneInfo();
    
    // "Ui" operations 
    
    IMPORT_C void GetProcessesL(RArray<CMemSpyApiProcess*> &aProcesses, TSortType aSortType = ESortProcById);
    
    IMPORT_C TProcessId GetProcessIdByNameL(const TDesC& aProcessName);
    
    IMPORT_C void GetThreadsL(TProcessId aProcessId, RArray<CMemSpyApiThread*> &aThreads, TSortType aSortType = ESortProcById);
    
    IMPORT_C TInt ProcessSystemPermanentOrCritical( TProcessId aId, TBool aValue ); //aValue -> return value
    
    IMPORT_C void SetThreadPriorityL(TThreadId aId, TInt aPriority);
    
    IMPORT_C TInt EndProcess( TProcessId aId, TMemSpyEndType aType );
    
    IMPORT_C TInt SwitchToProcess( TProcessId aId, TBool aBrought  );
    
    //SWMT operations
    
    IMPORT_C void GetMemoryTrackingCyclesL(RArray<CMemSpyApiMemoryTrackingCycle*>& aCycles);
    
    IMPORT_C void SetSwmtConfig( TMemSpyEngineHelperSysMemTrackerConfig aConfig );    
    
    IMPORT_C void SetSwmtAutoStartProcessList( CArrayFixFlat<TUid>* aList );
    
    IMPORT_C void SetSwmtFilter( const TDesC& aFilter );            
    
    IMPORT_C void SetSwmtCategoriesL(TInt aCategories);

    IMPORT_C void SetSwmtHeapDumpsEnabledL(TBool aEnabled);
    
    IMPORT_C void SwmtResetTracking();
    
    IMPORT_C void GetOutputSink( TMemSpySinkType aType );
           
    IMPORT_C TBool IsSwmtRunningL();
    
    IMPORT_C void StartSwmtTimerL(TInt aPeriod);
    
    IMPORT_C void StartSwmtTimerL(); // for CLI
    
    IMPORT_C void SetSwmtTimerIntervalL(TInt aPeriod); //for CLI
    
    IMPORT_C void StopSwmtTimerL();
    
    IMPORT_C void ForceSwmtUpdateL();
    
    IMPORT_C void ForceSwmtUpdate(TRequestStatus& aStatus);
    
    //Threads operations
    /**
     * 
     */
    IMPORT_C void GetThreadsL(TProcessId aProcessId, RArray<CMemSpyApiProcess*> &aThreads, TSortType aSortType = ESortProcById);
    
    IMPORT_C TInt ThreadSystemPermanentOrCritical( TThreadId aId, TBool aValue );
        
    IMPORT_C TInt EndThread( TThreadId aId, TMemSpyEndType aType );
    
    IMPORT_C TInt SwitchToThread( TThreadId aId, TBool aBrought );
    
    IMPORT_C TInt GetInfoItemType( TInt aIndex, TThreadId aId, TMemSpyThreadInfoItemType &aType );
    
    IMPORT_C TInt GetThreadInfoItems( RArray<CMemSpyApiThreadInfoItem*> &aInfoItems, TThreadId aId, TMemSpyThreadInfoItemType aType );
    
    IMPORT_C void GetThreadInfoItemsL( RArray<CMemSpyApiThreadInfoItem*> &aInfoItems, TThreadId aId, TMemSpyThreadInfoItemType aType );
        
    
    //KernelObjects operations
    
    IMPORT_C void GetKernelObjectsL( RArray<CMemSpyApiKernelObject*> &aKernelObjects );
    
    IMPORT_C TInt GetKernelObjects( RArray<CMemSpyApiKernelObject*> &aKernelObjects );
    
    IMPORT_C void GetKernelObjectItemsL( RArray<CMemSpyApiKernelObjectItem*> &aKernelObjectItems, TMemSpyDriverContainerType aForContainer );
    
    IMPORT_C TInt GetKernelObjectItems( RArray<CMemSpyApiKernelObjectItem*> &aKernelObjectItems, TMemSpyDriverContainerType aForContainer );
    
    IMPORT_C void OutputAllContainerContents();
    
    // Heap 
    
    IMPORT_C CMemSpyApiHeap* GetHeapL();
    
	IMPORT_C CMemSpyApiHeap* GetHeap();
	
	IMPORT_C void DumpKernelHeap();	
	
private:
    TInt StartServer();       
    
    void SetOutputTypeL(TMemSpyOutputType aOutputType);
    
    };

#endif // MEMSPYSESSION_H