diff -r b3cee849fa46 -r fad26422216a memspyui/ui/hb/src/enginewrapper.cpp --- a/memspyui/ui/hb/src/enginewrapper.cpp Tue Aug 31 15:15:20 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,506 +0,0 @@ -/* -* 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: -* -*/ - -#include - -#include - -#include "enginewrapper.h" - -// CONSTANTS - -const QString OUTPUT_MODE = "output/mode"; -const QString OUTPUT_PATH = "output/path"; -const QString SWMT_PERIOD = "swmt/period"; -const QString SWMT_MODE = "swmt/mode"; -const QString SWMT_CATEGORIES = "swmt/categories"; -const QString HEAP_DUMPS_MODE = "heapdumps/mode"; - -QString MemSpyProcess::exitInfo() const -{ - QChar exitType[] = {'K', 'T', 'P', 'R'}; - QString result = QString("[%1]").arg(exitType[mProcess->ExitType()]); - - if (mProcess->ExitType() != EExitKill && mProcess->ExitType() != EExitPending) { - - QString exitCategory = QString((QChar*) mProcess->ExitCategory().Ptr(), mProcess->ExitCategory().Length()); - result.append(QString(" %1-%2").arg(exitCategory).arg(mProcess->ExitReason())); - } - - return result; -} - - -MemSpyDwoProgressTracker::MemSpyDwoProgressTracker(RMemSpySession &session) : - CActive(EPriorityStandard), mSession(session) -{ - CActiveScheduler::Add(this); -} - -MemSpyDwoProgressTracker::~MemSpyDwoProgressTracker() -{ - Cancel(); -} - -void MemSpyDwoProgressTracker::start() -{ - mSession.NotifyDeviceWideOperationProgress(mProgress, iStatus); - - SetActive(); -} - -void MemSpyDwoProgressTracker::cancel() -{ - Cancel(); -} - -// Event handler method. - -void MemSpyDwoProgressTracker::RunL() - { - - // If an error occurred handle it in RunError(). - User::LeaveIfError(iStatus.Int()); - - // Resubmit the request immediately - - mSession.NotifyDeviceWideOperationProgress(mProgress, iStatus); - - SetActive(); - - emit progress(mProgress.Progress(), QString((QChar*) mProgress.Description().Ptr(), mProgress.Description().Length())); - } - -void MemSpyDwoProgressTracker::DoCancel() -{ - // this is not yet implemented, as it is not required in current use cases -} - -TInt MemSpyDwoProgressTracker::RunError(TInt aError) -{ - // KErrNotReady and KErrCancel errors are OK, they just notify - // us about the outstanding notification request that won't be - // processed. - Q_UNUSED(aError); - - return KErrNone; -} - -MemSpyDwoTracker::MemSpyDwoTracker(RMemSpySession &session, DeviceWideOperation operation) : - CActive(EPriorityStandard), - mSession(session), - mProgressTracker(new MemSpyDwoProgressTracker(session)), - mOperation(operation) -{ - CActiveScheduler::Add(this); - connect(mProgressTracker, SIGNAL(progress(int,QString)), this, SIGNAL(progress(int,QString))); -} - -MemSpyDwoTracker::~MemSpyDwoTracker() -{ - Cancel(); - - delete mProgressTracker; -} - -void MemSpyDwoTracker::start() -{ - void (RMemSpySession::*functions[])(TRequestStatus&) = { - &RMemSpySession::OutputPhoneInfo, - &RMemSpySession::OutputDetailedPhoneInfo, - &RMemSpySession::OutputHeapInfo, - &RMemSpySession::OutputCompactHeapInfo, - &RMemSpySession::OutputHeapCellListing, - &RMemSpySession::OutputHeapData, - &RMemSpySession::OutputStackInfo, - &RMemSpySession::OutputCompactStackInfo, - &RMemSpySession::OutputUserStackData, - &RMemSpySession::OutputKernelStackData }; - - (mSession.*functions[mOperation])(iStatus); - - mProgressTracker->start(); - - SetActive(); -} - -void MemSpyDwoTracker::cancel() -{ - Cancel(); -} - -// Event handler method. - -void MemSpyDwoTracker::RunL() - { - - // If an error occurred handle it in RunError(). - User::LeaveIfError(iStatus.Int()); - - // Operation has finished successfully - emit finished(0); - } - -void MemSpyDwoTracker::DoCancel() -{ - // Cancel progress tracker - mProgressTracker->cancel(); - - mSession.CancelDeviceWideOperationL(); -} - -TInt MemSpyDwoTracker::RunError(TInt aError) -{ - // Emit the finished signal to notify user - // operation was canceled - emit finished(aError); - - return KErrNone; -} - -MemSpyAsyncTracker::MemSpyAsyncTracker(RMemSpySession& session, void (RMemSpySession::*function)(TRequestStatus&)) : - CActive(EPriorityStandard), - mFunction(function), - mSession(session) -{ - CActiveScheduler::Add(this); -} - -void MemSpyAsyncTracker::RunL() -{ - // If an error occurred handle it in RunError(). - User::LeaveIfError(iStatus.Int()); - - // Operation has finished successfully - emit finished(0); -} - -void MemSpyAsyncTracker::DoCancel() -{ - // nothing to do here -} - -TInt MemSpyAsyncTracker::RunError(TInt aError) -{ - // Emit the finished signal to notify user - // that operation was canceled - emit finished(aError); - - return KErrNone; -} - -void MemSpyAsyncTracker::start() -{ - (mSession.*mFunction)(iStatus); - - SetActive(); -} - -MemSpySettings::MemSpySettings() : - QSettings("Nokia", "MemSpy") -{ -} - -OutputMode MemSpySettings::outputMode() const -{ - return static_cast(value(OUTPUT_MODE, 0).toInt()); -} - -void MemSpySettings::setOutputMode(OutputMode mode) -{ - setValue(OUTPUT_MODE, mode); -} - -QString MemSpySettings::outputPath() const -{ - return value(OUTPUT_PATH).toString(); -} - -void MemSpySettings::setOutputPath(const QString& path) -{ - setValue(OUTPUT_PATH, path); -} - -int MemSpySettings::swmtTimerPeriod() const -{ - return value(SWMT_PERIOD, 30).toInt(); -} - -void MemSpySettings::setSwmtMode(SwmtMode mode) -{ - setValue(SWMT_MODE, mode); -} - -SwmtMode MemSpySettings::swmtMode() const -{ - return static_cast(value(SWMT_MODE, 0).toInt()); -} - -void MemSpySettings::setSwmtTimerPeriod(int period) -{ - setValue(SWMT_PERIOD, period); -} - - -QVariantList MemSpySettings::swmtCategories() const -{ - return value(SWMT_CATEGORIES).toList(); -} - -void MemSpySettings::setSwmtCategories(const QVariantList& categories) -{ - setValue(SWMT_CATEGORIES, categories); -} - -HeapDumpsMode MemSpySettings::heapDumpsMode() const -{ - return static_cast(value(HEAP_DUMPS_MODE).toInt()); -} - -void MemSpySettings::setHeapDumpsMode(HeapDumpsMode mode) -{ - setValue(HEAP_DUMPS_MODE, mode); -} - - -EngineWrapper::EngineWrapper() : - mSwmtRunning(false) -{ -} - -EngineWrapper::~EngineWrapper() -{ - mSession.Close(); -} - -bool EngineWrapper::initialize() -{ - return mSession.Connect() == KErrNone; -} - -MemSpySettings& EngineWrapper::settings() -{ - return mSettings; -} - -const MemSpySettings& EngineWrapper::settings() const -{ - return mSettings; -} - - - -QList EngineWrapper::getProcesses() -{ - QList result; - - RArray proc; - - QT_TRAP_THROWING(mSession.GetProcessesL(proc)); - - for (TInt i=0; i EngineWrapper::getThreads(ProcessId processId) -{ - QList result; - - RArray proc; - - QT_TRAP_THROWING(mSession.GetThreadsL(processId, proc)); - - for (TInt i=0; i EngineWrapper::getThreadInfo(ThreadId threadId, ThreadInfoType type) -{ - QList result; - RArray threadInfo; - qt_symbian_throwIfError(mSession.GetThreadInfoItems(threadInfo, threadId, - static_cast(type))); - - for (TInt i=0; i EngineWrapper::getKernelObjectTypes() -{ - QList result; - - RArray types; - qt_symbian_throwIfError(mSession.GetKernelObjects(types)); - - for(TInt i=0; i EngineWrapper::getKernelObjects(int type) -{ - QList result; - - RArray objects; - qt_symbian_throwIfError(mSession.GetKernelObjectItems(objects, - static_cast(type))); - - for(TInt i=0; i(filter.utf16()), filter.length()); - - TRAPD(err, mSession.OutputThreadHeapDataL(customFilterDesc)); - - return err; -} - -void EngineWrapper::updateOutputSettings() -{ - switch (mSettings.outputMode()) { - case OutputModeTrace: - TRAP_IGNORE(mSession.SwitchOutputToTraceL()); - break; - - case OutputModeFile: - - if (mSettings.outputPath().isEmpty()) { - TRAP_IGNORE(mSession.SwitchOutputToFileL(KNullDesC)); - - } else { - - QString root = mSettings.outputPath(); - TPtrC rootDesc (static_cast(root.utf16()), root.length()); - - TRAP_IGNORE(mSession.SwitchOutputToFileL(rootDesc)); - } - - } -}