piprofilerui/ui/avkon/src/profiler_gui_model.cpp
author hgs
Thu, 17 Jun 2010 15:34:52 +0300
changeset 30 d8e625c87f33
parent 26 41ebde60981f
permissions -rw-r--r--
201023_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:   
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
hgs
parents:
diff changeset
    20
// INCLUDE FILES
hgs
parents:
diff changeset
    21
#include "profiler_gui_samplersettingsviewdlg.h"
hgs
parents:
diff changeset
    22
#include "profiler_gui_model.h"
hgs
parents:
diff changeset
    23
#include "profiler_gui_app.h"
hgs
parents:
diff changeset
    24
#include "profiler_gui_settingsviewdlg.h"
hgs
parents:
diff changeset
    25
#include "profiler_gui_maincontainer.h"
hgs
parents:
diff changeset
    26
#include "profiler_gui.hrh"
hgs
parents:
diff changeset
    27
#include <piprofilerui.rsg>
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
#include <coeutils.h>
hgs
parents:
diff changeset
    30
#include <bautils.h>
hgs
parents:
diff changeset
    31
#include <eikenv.h>
hgs
parents:
diff changeset
    32
#include <AknQueryDialog.h>
hgs
parents:
diff changeset
    33
#include <AknGlobalNote.h>
hgs
parents:
diff changeset
    34
#include <aknmessagequerydialog.h> 
hgs
parents:
diff changeset
    35
#include <e32math.h> 
hgs
parents:
diff changeset
    36
#include <akntitle.h> 
hgs
parents:
diff changeset
    37
#include <s32file.h>
hgs
parents:
diff changeset
    38
#include <aknnotewrappers.h>
hgs
parents:
diff changeset
    39
#include <sysutil.h>
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
// UIDs
hgs
parents:
diff changeset
    42
#include <piprofiler/EngineUIDs.h>
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
#include <piprofiler/ProfilerTraces.h>
hgs
parents:
diff changeset
    45
#include <piprofiler/ProfilerSession.h>
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
// LITERALS
hgs
parents:
diff changeset
    48
_LIT(KAppName, "PI Profiler");
hgs
parents:
diff changeset
    49
_LIT(KWarningNote, "NOTE: output changed!\n");
hgs
parents:
diff changeset
    50
_LIT(KProfilerEngineExe, "PIProfilerEngine.exe");
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
// literals for default general setting values
hgs
parents:
diff changeset
    53
_LIT8(KTraceOutput, "file_system");
hgs
parents:
diff changeset
    54
_LIT8(KTraceDebugOutput, "debug_output");
hgs
parents:
diff changeset
    55
_LIT8(KProfilerDefaultDrive, "E:\\data");
hgs
parents:
diff changeset
    56
_LIT8(KProfilerDefaultPrefix, "Profiler_#");
hgs
parents:
diff changeset
    57
hgs
parents:
diff changeset
    58
// ===================================== MEMBER FUNCTIONS =====================================
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
CProfilerGuiModel* CProfilerGuiModel::NewL() 
hgs
parents:
diff changeset
    61
	{
hgs
parents:
diff changeset
    62
	CProfilerGuiModel* self = new(ELeave) CProfilerGuiModel;
hgs
parents:
diff changeset
    63
	CleanupStack::PushL(self);
hgs
parents:
diff changeset
    64
	self->ConstructL();
hgs
parents:
diff changeset
    65
	CleanupStack::Pop();
hgs
parents:
diff changeset
    66
	return self;
hgs
parents:
diff changeset
    67
	}
hgs
parents:
diff changeset
    68
hgs
parents:
diff changeset
    69
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
    70
hgs
parents:
diff changeset
    71
CProfilerGuiModel::CProfilerGuiModel() : CActive(EPriorityStandard)
hgs
parents:
diff changeset
    72
	{
hgs
parents:
diff changeset
    73
	}
hgs
parents:
diff changeset
    74
	
hgs
parents:
diff changeset
    75
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
void CProfilerGuiModel::ConstructL()
hgs
parents:
diff changeset
    78
	{
hgs
parents:
diff changeset
    79
	// initialize basic settings
hgs
parents:
diff changeset
    80
	iDrawState = EDrawStateInvalid;
hgs
parents:
diff changeset
    81
	iReferenceNumber = 0;
hgs
parents:
diff changeset
    82
	iState = MProfilerStatusObserver::EIdle;
hgs
parents:
diff changeset
    83
	
hgs
parents:
diff changeset
    84
    iEnv = CEikonEnv::Static();
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
    // profiler engine specific initialization
hgs
parents:
diff changeset
    87
    LaunchProfilerEngineL();
hgs
parents:
diff changeset
    88
    
hgs
parents:
diff changeset
    89
    // max sampler item list length is 64, i.e. max 64 sampler plugins loaded 
hgs
parents:
diff changeset
    90
    iSamplerItemList = new(ELeave) CSamplerItemList(64);
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
    // initialize attribute arrays
hgs
parents:
diff changeset
    93
    iSamplerAttributes = new(ELeave) CArrayFixFlat<TSamplerAttributes>(20); // max sampler count is 20
hgs
parents:
diff changeset
    94
    
hgs
parents:
diff changeset
    95
    // engine status checker
hgs
parents:
diff changeset
    96
    iStatusChecker = CProfilerEngineStatusChecker::NewL();
hgs
parents:
diff changeset
    97
    iStatusChecker->SetObserver(this);
hgs
parents:
diff changeset
    98
 	
hgs
parents:
diff changeset
    99
	CActiveScheduler::Add(this);
hgs
parents:
diff changeset
   100
	}
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
void CProfilerGuiModel::UpdateUIRunningStateL()
hgs
parents:
diff changeset
   103
    {
hgs
parents:
diff changeset
   104
    // prevent the control of sampler specific settings during the trace 
hgs
parents:
diff changeset
   105
    iMainContainer->SetDimmed(ETrue);
hgs
parents:
diff changeset
   106
    
hgs
parents:
diff changeset
   107
    // update status pane
hgs
parents:
diff changeset
   108
    iMainView->UpdateStatusPaneL(iState);
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
    // show an info popup showing the logging method
hgs
parents:
diff changeset
   111
    iMainContainer->ShowWriterInfoPopupL(KNullDesC);
hgs
parents:
diff changeset
   112
    
hgs
parents:
diff changeset
   113
    // refresh view
hgs
parents:
diff changeset
   114
    RefreshViewL();
hgs
parents:
diff changeset
   115
    }
hgs
parents:
diff changeset
   116
hgs
parents:
diff changeset
   117
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   118
void CProfilerGuiModel::NotifyContainerReadyL()
hgs
parents:
diff changeset
   119
	{
hgs
parents:
diff changeset
   120
	// load initial plugins
hgs
parents:
diff changeset
   121
    LoadPluginsL();
hgs
parents:
diff changeset
   122
    
hgs
parents:
diff changeset
   123
    // get the initial state
hgs
parents:
diff changeset
   124
    if( iStatusChecker->GetInitialState() == MProfilerStatusObserver::ERunning )
hgs
parents:
diff changeset
   125
        {
hgs
parents:
diff changeset
   126
        // set model state to restarting and grabbing an existing profiler process
hgs
parents:
diff changeset
   127
        iState = MProfilerStatusObserver::ERestarting;
hgs
parents:
diff changeset
   128
        
hgs
parents:
diff changeset
   129
        // update status pane to correspond the running mode
hgs
parents:
diff changeset
   130
        UpdateUIRunningStateL();
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
        // set model state to running
hgs
parents:
diff changeset
   133
        iState = MProfilerStatusObserver::ERunning;
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
        }
hgs
parents:
diff changeset
   136
	}
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   139
hgs
parents:
diff changeset
   140
void CProfilerGuiModel::ActivateModelL()
hgs
parents:
diff changeset
   141
	{
hgs
parents:
diff changeset
   142
	// load general settings
hgs
parents:
diff changeset
   143
	if( LoadGeneralSettingsL() != KErrNone )
hgs
parents:
diff changeset
   144
	    {
hgs
parents:
diff changeset
   145
	    LOGTEXT(_L("ProfilerGuiAppUi::ActivateModelL - could not connect profiler engine"));
hgs
parents:
diff changeset
   146
	    }
hgs
parents:
diff changeset
   147
	}
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
void CProfilerGuiModel::DeActivateModelL()
hgs
parents:
diff changeset
   152
	{
hgs
parents:
diff changeset
   153
	Cancel();
hgs
parents:
diff changeset
   154
	
hgs
parents:
diff changeset
   155
	// for a faster exit, send the application to background
hgs
parents:
diff changeset
   156
    TApaTask selfTask(iEnv->WsSession());
hgs
parents:
diff changeset
   157
    selfTask.SetWgId(iEnv->RootWin().Identifier());
hgs
parents:
diff changeset
   158
    selfTask.SendToBackground();
hgs
parents:
diff changeset
   159
	}
hgs
parents:
diff changeset
   160
	
hgs
parents:
diff changeset
   161
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
CProfilerGuiModel::~CProfilerGuiModel()
hgs
parents:
diff changeset
   164
	{
hgs
parents:
diff changeset
   165
    if (iSamplerItemList)
hgs
parents:
diff changeset
   166
        {
hgs
parents:
diff changeset
   167
        DeleteAllSamplerItems();
hgs
parents:
diff changeset
   168
        delete iSamplerItemList;
hgs
parents:
diff changeset
   169
        iSamplerItemList = NULL;
hgs
parents:
diff changeset
   170
        }
hgs
parents:
diff changeset
   171
    
hgs
parents:
diff changeset
   172
    if(iStatusChecker)
hgs
parents:
diff changeset
   173
        {
hgs
parents:
diff changeset
   174
        iStatusChecker->Cancel();
hgs
parents:
diff changeset
   175
        delete iStatusChecker;
hgs
parents:
diff changeset
   176
        iStatusChecker = NULL;
hgs
parents:
diff changeset
   177
        }
hgs
parents:
diff changeset
   178
    
hgs
parents:
diff changeset
   179
  
hgs
parents:
diff changeset
   180
    if(iSamplerAttributes)
hgs
parents:
diff changeset
   181
        {
hgs
parents:
diff changeset
   182
        iSamplerAttributes->Reset();
hgs
parents:
diff changeset
   183
        delete iSamplerAttributes;
hgs
parents:
diff changeset
   184
        iSamplerAttributes = NULL;
hgs
parents:
diff changeset
   185
        }
hgs
parents:
diff changeset
   186
     
hgs
parents:
diff changeset
   187
    }
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   190
hgs
parents:
diff changeset
   191
void CProfilerGuiModel::DoCancel()
hgs
parents:
diff changeset
   192
	{
hgs
parents:
diff changeset
   193
    
hgs
parents:
diff changeset
   194
	}
hgs
parents:
diff changeset
   195
hgs
parents:
diff changeset
   196
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   197
hgs
parents:
diff changeset
   198
void CProfilerGuiModel::RunL()
hgs
parents:
diff changeset
   199
	{
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
	}
hgs
parents:
diff changeset
   202
	
hgs
parents:
diff changeset
   203
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
void CProfilerGuiModel::SetMainContainer(CProfilerGuiMainContainer* aContainer)
hgs
parents:
diff changeset
   206
    {
hgs
parents:
diff changeset
   207
    iMainContainer = aContainer;
hgs
parents:
diff changeset
   208
    iDrawState = EDrawStateMain;
hgs
parents:
diff changeset
   209
    }
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
void CProfilerGuiModel::UpdateState(TInt aState)
hgs
parents:
diff changeset
   212
	{
hgs
parents:
diff changeset
   213
	iState = aState;
hgs
parents:
diff changeset
   214
	}
hgs
parents:
diff changeset
   215
hgs
parents:
diff changeset
   216
TInt CProfilerGuiModel::FindProcessL(RProcess& aProc)
hgs
parents:
diff changeset
   217
    {
hgs
parents:
diff changeset
   218
    TProcessId engId;
hgs
parents:
diff changeset
   219
    TFindProcess procName;
hgs
parents:
diff changeset
   220
    procName.Find(_L("PIProfilerEngine.exe*"));
hgs
parents:
diff changeset
   221
    TFullName aResult;
hgs
parents:
diff changeset
   222
    TFullName aResult2;
hgs
parents:
diff changeset
   223
    TInt err(KErrNone);
hgs
parents:
diff changeset
   224
hgs
parents:
diff changeset
   225
    // find the first appearance
hgs
parents:
diff changeset
   226
    err = procName.Next(aResult);
hgs
parents:
diff changeset
   227
    if(err != KErrNone)
hgs
parents:
diff changeset
   228
        {
hgs
parents:
diff changeset
   229
        // did not find any engine process
hgs
parents:
diff changeset
   230
        return err;
hgs
parents:
diff changeset
   231
        }
hgs
parents:
diff changeset
   232
    else
hgs
parents:
diff changeset
   233
        {
hgs
parents:
diff changeset
   234
        err = aProc.Open(procName);
hgs
parents:
diff changeset
   235
        if(err == KErrNone)
hgs
parents:
diff changeset
   236
            {
hgs
parents:
diff changeset
   237
            if(aProc.ExitCategory().Length() > 0)
hgs
parents:
diff changeset
   238
                {
hgs
parents:
diff changeset
   239
                aProc.Close();
hgs
parents:
diff changeset
   240
                // process already exited => create a new one
hgs
parents:
diff changeset
   241
                return KErrNotFound;
hgs
parents:
diff changeset
   242
                }
hgs
parents:
diff changeset
   243
            aProc.Close();
hgs
parents:
diff changeset
   244
            }
hgs
parents:
diff changeset
   245
        }
hgs
parents:
diff changeset
   246
    
hgs
parents:
diff changeset
   247
//    // check now if a second appearance exists in process list, 
hgs
parents:
diff changeset
   248
//    // i.e. engine started from eshell => two engine processes appear in normal case
hgs
parents:
diff changeset
   249
//    procName.Next(aResult2);
hgs
parents:
diff changeset
   250
//
hgs
parents:
diff changeset
   251
//    // check if aResult2 contained the second appearance of profiler engine
hgs
parents:
diff changeset
   252
//    if(aResult2.CompareF(aResult) > 0)
hgs
parents:
diff changeset
   253
//        {
hgs
parents:
diff changeset
   254
//        // other process found, i.e. right process to communicate with, in case started from eshell
hgs
parents:
diff changeset
   255
//        err = aProc.Open(procName);
hgs
parents:
diff changeset
   256
//        if(err == KErrNone)
hgs
parents:
diff changeset
   257
//            {
hgs
parents:
diff changeset
   258
//            if(aProc.ExitCategory().Length() > 0)
hgs
parents:
diff changeset
   259
//                {
hgs
parents:
diff changeset
   260
//                // process already exited => create a new one
hgs
parents:
diff changeset
   261
//                return KErrNotFound;
hgs
parents:
diff changeset
   262
//                }
hgs
parents:
diff changeset
   263
//            aProc.Close();
hgs
parents:
diff changeset
   264
//            }
hgs
parents:
diff changeset
   265
//        }
hgs
parents:
diff changeset
   266
    
hgs
parents:
diff changeset
   267
    return err;
hgs
parents:
diff changeset
   268
    }
hgs
parents:
diff changeset
   269
hgs
parents:
diff changeset
   270
void CProfilerGuiModel::LaunchProfilerEngineL()
hgs
parents:
diff changeset
   271
    {
hgs
parents:
diff changeset
   272
    LOGTEXT(_L("CProfilerGuiModel::LaunchProfilerEngineL - start"));
hgs
parents:
diff changeset
   273
hgs
parents:
diff changeset
   274
    TRequestStatus stat = KRequestPending;
hgs
parents:
diff changeset
   275
    RProcess proc;
hgs
parents:
diff changeset
   276
    
hgs
parents:
diff changeset
   277
    TInt err(KErrNone);
hgs
parents:
diff changeset
   278
    
hgs
parents:
diff changeset
   279
    // check if process exists
hgs
parents:
diff changeset
   280
    err = FindProcessL(proc);
hgs
parents:
diff changeset
   281
    
hgs
parents:
diff changeset
   282
    // check if already exists and don't start a new eshell profiling
hgs
parents:
diff changeset
   283
    if( err == KErrNotFound )
hgs
parents:
diff changeset
   284
        {
hgs
parents:
diff changeset
   285
        // try create new process
hgs
parents:
diff changeset
   286
        err = proc.Create(KProfilerEngineExe, _L(""));
hgs
parents:
diff changeset
   287
hgs
parents:
diff changeset
   288
        // check if RProcess::Create() succeeded
hgs
parents:
diff changeset
   289
        if( err == KErrNone )
hgs
parents:
diff changeset
   290
            {
hgs
parents:
diff changeset
   291
            // Trigger rendezvous on the supplied TRequestStatus object
hgs
parents:
diff changeset
   292
            proc.Rendezvous(stat); 
hgs
parents:
diff changeset
   293
hgs
parents:
diff changeset
   294
            // kick off the engine process
hgs
parents:
diff changeset
   295
            proc.Resume();
hgs
parents:
diff changeset
   296
            
hgs
parents:
diff changeset
   297
            // wait for the constructor to complete 
hgs
parents:
diff changeset
   298
            User::WaitForRequest(stat); 
hgs
parents:
diff changeset
   299
            
hgs
parents:
diff changeset
   300
            // just lose the handle
hgs
parents:
diff changeset
   301
            proc.Close();
hgs
parents:
diff changeset
   302
            }
hgs
parents:
diff changeset
   303
        }
hgs
parents:
diff changeset
   304
    
hgs
parents:
diff changeset
   305
    // Increase the client reference count in server:
hgs
parents:
diff changeset
   306
    AttachClient();    
hgs
parents:
diff changeset
   307
    }
hgs
parents:
diff changeset
   308
hgs
parents:
diff changeset
   309
//-----------------------------------------------------------------------------
hgs
parents:
diff changeset
   310
// CProfilerGuiModel::TerminateProfilerL()
hgs
parents:
diff changeset
   311
// Stops Profiler Engine if it has been launched by this launcher. 
hgs
parents:
diff changeset
   312
//-----------------------------------------------------------------------------
hgs
parents:
diff changeset
   313
hgs
parents:
diff changeset
   314
void CProfilerGuiModel::TerminateProfilerL()
hgs
parents:
diff changeset
   315
    {
hgs
parents:
diff changeset
   316
    LOGTEXT(_L("CProfilerGuiModel::TerminateProfiler - entry"));
hgs
parents:
diff changeset
   317
    
hgs
parents:
diff changeset
   318
    // exit profiler engine 
hgs
parents:
diff changeset
   319
    RProfiler::ExitProfiler();
hgs
parents:
diff changeset
   320
        
hgs
parents:
diff changeset
   321
    LOGTEXT(_L("CProfilerGuiModel::TerminateProfiler - exit"));
hgs
parents:
diff changeset
   322
    
hgs
parents:
diff changeset
   323
    }
hgs
parents:
diff changeset
   324
hgs
parents:
diff changeset
   325
void CProfilerGuiModel::AttachClient()
hgs
parents:
diff changeset
   326
    {
hgs
parents:
diff changeset
   327
    LOGTEXT(_L("CProfilerGuiModel::AttachClient - entry"));
hgs
parents:
diff changeset
   328
    
hgs
parents:
diff changeset
   329
    // 
hgs
parents:
diff changeset
   330
    RProfiler::AttachClient();
hgs
parents:
diff changeset
   331
        
hgs
parents:
diff changeset
   332
    LOGTEXT(_L("CProfilerGuiModel::AttachClient - exit"));
hgs
parents:
diff changeset
   333
    
hgs
parents:
diff changeset
   334
    }
hgs
parents:
diff changeset
   335
hgs
parents:
diff changeset
   336
void CProfilerGuiModel::RemoveClient()
hgs
parents:
diff changeset
   337
    {
hgs
parents:
diff changeset
   338
    LOGTEXT(_L("CProfilerGuiModel::RemoveClient - entry"));
hgs
parents:
diff changeset
   339
    
hgs
parents:
diff changeset
   340
    // 
hgs
parents:
diff changeset
   341
    RProfiler::RemoveClient();
hgs
parents:
diff changeset
   342
        
hgs
parents:
diff changeset
   343
    LOGTEXT(_L("CProfilerGuiModel::RemoveClient - exit"));
hgs
parents:
diff changeset
   344
    
hgs
parents:
diff changeset
   345
    }
hgs
parents:
diff changeset
   346
hgs
parents:
diff changeset
   347
void CProfilerGuiModel::AddNewSamplersL(CArrayFixFlat<TSamplerAttributes>& aAttributes)
hgs
parents:
diff changeset
   348
	{
hgs
parents:
diff changeset
   349
	TSamplerAttributes item;
hgs
parents:
diff changeset
   350
	
hgs
parents:
diff changeset
   351
	TInt count(aAttributes.Count());
hgs
parents:
diff changeset
   352
hgs
parents:
diff changeset
   353
	// loop the attribute array and insert them into view list
hgs
parents:
diff changeset
   354
	for (TInt i(0);i<count;i++)
hgs
parents:
diff changeset
   355
		{
hgs
parents:
diff changeset
   356
    	// get a TSamplerAttributes from list at a time  
hgs
parents:
diff changeset
   357
		item = aAttributes.At(i);
hgs
parents:
diff changeset
   358
hgs
parents:
diff changeset
   359
		iReferenceNumber++;
hgs
parents:
diff changeset
   360
	
hgs
parents:
diff changeset
   361
        // add item to the array
hgs
parents:
diff changeset
   362
        AppendToSamplerItemListL(item);
hgs
parents:
diff changeset
   363
        
hgs
parents:
diff changeset
   364
        // update the listbox
hgs
parents:
diff changeset
   365
        RefreshViewL(EFalse);
hgs
parents:
diff changeset
   366
        
hgs
parents:
diff changeset
   367
        // set item index to the begin	
hgs
parents:
diff changeset
   368
        iMainContainer->ListBox()->SetCurrentItemIndexAndDraw(iMainContainer->ListBox()->Model()->NumberOfItems()-1);
hgs
parents:
diff changeset
   369
hgs
parents:
diff changeset
   370
		}
hgs
parents:
diff changeset
   371
    // refresh again
hgs
parents:
diff changeset
   372
    if(iReferenceNumber > 0)
hgs
parents:
diff changeset
   373
        {
hgs
parents:
diff changeset
   374
        RefreshViewL(ETrue);
hgs
parents:
diff changeset
   375
        }
hgs
parents:
diff changeset
   376
	}
hgs
parents:
diff changeset
   377
hgs
parents:
diff changeset
   378
TBool CProfilerGuiModel::CheckTraceLocationSanityL(TGeneralAttributes& aAttr, TBool aQuietCheck)
hgs
parents:
diff changeset
   379
    {
hgs
parents:
diff changeset
   380
    RFs fs;
hgs
parents:
diff changeset
   381
    User::LeaveIfError(fs.Connect());
hgs
parents:
diff changeset
   382
hgs
parents:
diff changeset
   383
    TBuf<32> drive;
hgs
parents:
diff changeset
   384
    
hgs
parents:
diff changeset
   385
    CnvUtfConverter::ConvertToUnicodeFromUtf8(drive, aAttr.iSaveFileDrive);
hgs
parents:
diff changeset
   386
hgs
parents:
diff changeset
   387
    TDriveUnit driveUnit = TDriveUnit(drive);
hgs
parents:
diff changeset
   388
hgs
parents:
diff changeset
   389
    TBool ret(EFalse);
hgs
parents:
diff changeset
   390
hgs
parents:
diff changeset
   391
    // check that the root folder is correct
hgs
parents:
diff changeset
   392
    if (drive.Length() > 2 && BaflUtils::CheckFolder(fs, drive.Left(3)) == KErrNone )
hgs
parents:
diff changeset
   393
        {
hgs
parents:
diff changeset
   394
        // check then if drive has still some space
hgs
parents:
diff changeset
   395
        if(!SysUtil::DiskSpaceBelowCriticalLevelL(&fs, 0, driveUnit))
hgs
parents:
diff changeset
   396
            {
hgs
parents:
diff changeset
   397
            ret = ETrue;
hgs
parents:
diff changeset
   398
            }
hgs
parents:
diff changeset
   399
        }
hgs
parents:
diff changeset
   400
    
hgs
parents:
diff changeset
   401
    // check if the sanity check failed
hgs
parents:
diff changeset
   402
    if(!ret)
hgs
parents:
diff changeset
   403
        {
hgs
parents:
diff changeset
   404
        // show an error note
hgs
parents:
diff changeset
   405
        if(aQuietCheck == EFalse)
hgs
parents:
diff changeset
   406
            {
hgs
parents:
diff changeset
   407
            CAknErrorNote* note = new(ELeave) CAknErrorNote();
hgs
parents:
diff changeset
   408
            note->ExecuteLD(_L("Invalid path, check settings!"));
hgs
parents:
diff changeset
   409
            }
hgs
parents:
diff changeset
   410
        }
hgs
parents:
diff changeset
   411
    fs.Close();
hgs
parents:
diff changeset
   412
    return ret;
hgs
parents:
diff changeset
   413
    }
hgs
parents:
diff changeset
   414
hgs
parents:
diff changeset
   415
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   416
hgs
parents:
diff changeset
   417
TInt CProfilerGuiModel::LaunchSettingsDialogL()
hgs
parents:
diff changeset
   418
    {
hgs
parents:
diff changeset
   419
    // launch the settings dialog
hgs
parents:
diff changeset
   420
    TGeneralAttributes newSettings = iGeneralAttributes;
hgs
parents:
diff changeset
   421
    TBool quietCheck(EFalse);
hgs
parents:
diff changeset
   422
    
hgs
parents:
diff changeset
   423
    CProfilerGuiSettingsViewDlg* dlg = CProfilerGuiSettingsViewDlg::NewL(newSettings);
hgs
parents:
diff changeset
   424
    TInt returnValue = dlg->ExecuteLD(R_PROFILER_GUI_SETTINGS_DIALOG);
hgs
parents:
diff changeset
   425
    
hgs
parents:
diff changeset
   426
    // check if exit command => no error note to user
hgs
parents:
diff changeset
   427
    if(returnValue == EAknCmdExit)
hgs
parents:
diff changeset
   428
        quietCheck = ETrue;
hgs
parents:
diff changeset
   429
    
hgs
parents:
diff changeset
   430
    // always save settings since the settings dialog does not provide a possibility to cancel
hgs
parents:
diff changeset
   431
    iGeneralAttributes.iTraceOutput.Copy(newSettings.iTraceOutput);
hgs
parents:
diff changeset
   432
    iGeneralAttributes.iTraceFilePrefix.Copy(newSettings.iTraceFilePrefix);
hgs
parents:
diff changeset
   433
    iGeneralAttributes.iTimedSamplingPeriod = newSettings.iTimedSamplingPeriod;
hgs
parents:
diff changeset
   434
hgs
parents:
diff changeset
   435
    // check if debug output selected no check of
hgs
parents:
diff changeset
   436
    if(newSettings.iTraceOutput.CompareF(KTraceDebugOutput) != 0)
hgs
parents:
diff changeset
   437
        {
hgs
parents:
diff changeset
   438
        // Check save file drive sanity
hgs
parents:
diff changeset
   439
        if(CheckTraceLocationSanityL(newSettings, quietCheck))
hgs
parents:
diff changeset
   440
            {
hgs
parents:
diff changeset
   441
            // save the new location
hgs
parents:
diff changeset
   442
            iGeneralAttributes.iSaveFileDrive.Copy(newSettings.iSaveFileDrive);
hgs
parents:
diff changeset
   443
            }
hgs
parents:
diff changeset
   444
        }
hgs
parents:
diff changeset
   445
    
hgs
parents:
diff changeset
   446
    // saves the general settings to profiler engine
hgs
parents:
diff changeset
   447
    SaveGeneralSettingsL();   
hgs
parents:
diff changeset
   448
    
hgs
parents:
diff changeset
   449
    // make sure that the title of the application is correct
hgs
parents:
diff changeset
   450
    CEikStatusPane* sp = iEnv->AppUiFactory()->StatusPane();
hgs
parents:
diff changeset
   451
    CAknTitlePane* tp = static_cast<CAknTitlePane*>( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
hgs
parents:
diff changeset
   452
    tp->SetTextL(KAppName);
hgs
parents:
diff changeset
   453
    
hgs
parents:
diff changeset
   454
    return returnValue;
hgs
parents:
diff changeset
   455
    }
hgs
parents:
diff changeset
   456
hgs
parents:
diff changeset
   457
hgs
parents:
diff changeset
   458
TPtrC CProfilerGuiModel::GetWriterInfoNoteL(const TDesC& aNote)
hgs
parents:
diff changeset
   459
	{
hgs
parents:
diff changeset
   460
    TBuf<256> buf;
hgs
parents:
diff changeset
   461
    TBuf<128> descBuf;
hgs
parents:
diff changeset
   462
    
hgs
parents:
diff changeset
   463
    buf.Zero();
hgs
parents:
diff changeset
   464
hgs
parents:
diff changeset
   465
    // get active profiler since it 
hgs
parents:
diff changeset
   466
    RProfiler::GetActiveWriter(buf);
hgs
parents:
diff changeset
   467
    
hgs
parents:
diff changeset
   468
	if(iGeneralAttributes.iTraceOutput.CompareF(KTraceOutput) == 0)
hgs
parents:
diff changeset
   469
		{
hgs
parents:
diff changeset
   470
		if(iState == MProfilerStatusObserver::EInitializing ||
hgs
parents:
diff changeset
   471
                iState == MProfilerStatusObserver::ERestarting )
hgs
parents:
diff changeset
   472
			{
hgs
parents:
diff changeset
   473
			descBuf.Zero();
hgs
parents:
diff changeset
   474
			// set the additional note if available
hgs
parents:
diff changeset
   475
			buf.Copy(aNote); 
hgs
parents:
diff changeset
   476
			RProfiler::GetFileName(descBuf);
hgs
parents:
diff changeset
   477
			buf.Append(_L("Writing to "));
hgs
parents:
diff changeset
   478
			buf.Append(descBuf);
hgs
parents:
diff changeset
   479
			}
hgs
parents:
diff changeset
   480
		else if(iState == MProfilerStatusObserver::EIdle ||
hgs
parents:
diff changeset
   481
		        iState == MProfilerStatusObserver::EStopping ||
hgs
parents:
diff changeset
   482
		        iState == MProfilerStatusObserver::ERunning )
hgs
parents:
diff changeset
   483
			{
hgs
parents:
diff changeset
   484
			descBuf.Zero();
hgs
parents:
diff changeset
   485
            // set the additional note if available
hgs
parents:
diff changeset
   486
            buf.Copy(aNote); 
hgs
parents:
diff changeset
   487
            RProfiler::GetFileName(descBuf);
hgs
parents:
diff changeset
   488
			buf.Append(_L("Wrote trace data to "));
hgs
parents:
diff changeset
   489
			buf.Append(descBuf);
hgs
parents:
diff changeset
   490
			}
hgs
parents:
diff changeset
   491
		else
hgs
parents:
diff changeset
   492
		    {
hgs
parents:
diff changeset
   493
	          buf.Copy(KNullDesC);
hgs
parents:
diff changeset
   494
		    }
hgs
parents:
diff changeset
   495
		}
hgs
parents:
diff changeset
   496
	else if(iGeneralAttributes.iTraceOutput.CompareF(KTraceDebugOutput) == 0)
hgs
parents:
diff changeset
   497
		{
hgs
parents:
diff changeset
   498
		if(iState == MProfilerStatusObserver::EInitializing ||
hgs
parents:
diff changeset
   499
                iState == MProfilerStatusObserver::ERestarting )
hgs
parents:
diff changeset
   500
			{
hgs
parents:
diff changeset
   501
			buf.Copy(_L("Writing to debug output..."));
hgs
parents:
diff changeset
   502
			}
hgs
parents:
diff changeset
   503
		else if( iState == MProfilerStatusObserver::EIdle || 
hgs
parents:
diff changeset
   504
	             iState == MProfilerStatusObserver::EStopping ||
hgs
parents:
diff changeset
   505
		         iState == MProfilerStatusObserver::ERunning )
hgs
parents:
diff changeset
   506
			{
hgs
parents:
diff changeset
   507
			buf.Copy(_L("Wrote trace data to debug output"));
hgs
parents:
diff changeset
   508
			}
hgs
parents:
diff changeset
   509
		else
hgs
parents:
diff changeset
   510
		    {
hgs
parents:
diff changeset
   511
		    buf.Copy(KNullDesC);
hgs
parents:
diff changeset
   512
		    }
hgs
parents:
diff changeset
   513
		}
hgs
parents:
diff changeset
   514
	else
hgs
parents:
diff changeset
   515
	    {
hgs
parents:
diff changeset
   516
	    // should not reach this point
hgs
parents:
diff changeset
   517
        buf.Copy(KNullDesC);
hgs
parents:
diff changeset
   518
	    }
hgs
parents:
diff changeset
   519
    
hgs
parents:
diff changeset
   520
    return TPtrC(buf);	
hgs
parents:
diff changeset
   521
    }
hgs
parents:
diff changeset
   522
hgs
parents:
diff changeset
   523
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   524
hgs
parents:
diff changeset
   525
TInt CProfilerGuiModel::EditSamplerL(TSamplerAttributes& aItem)
hgs
parents:
diff changeset
   526
    {
hgs
parents:
diff changeset
   527
    // edit sampler specific settings i.e. attributes
hgs
parents:
diff changeset
   528
    TSamplerAttributes& newSettings = aItem;
hgs
parents:
diff changeset
   529
    TInt indexToReplace(iMainContainer->CurrentListBoxItemIndex());
hgs
parents:
diff changeset
   530
    
hgs
parents:
diff changeset
   531
    // create a new settings editor dialog
hgs
parents:
diff changeset
   532
    CProfilerSamplerSettingsViewDlg* dlg = CProfilerSamplerSettingsViewDlg::NewL(newSettings);
hgs
parents:
diff changeset
   533
    TInt returnValue = dlg->ExecuteLD(R_PROFILER_SAMPLER_SETTINGS_DIALOG);
hgs
parents:
diff changeset
   534
    
hgs
parents:
diff changeset
   535
    // save settings
hgs
parents:
diff changeset
   536
    aItem = newSettings;
hgs
parents:
diff changeset
   537
hgs
parents:
diff changeset
   538
    // replace the old attribute container with saved values
hgs
parents:
diff changeset
   539
    iSamplerItemList->Delete(indexToReplace);
hgs
parents:
diff changeset
   540
    iSamplerItemList->InsertL(indexToReplace, newSettings);
hgs
parents:
diff changeset
   541
    
hgs
parents:
diff changeset
   542
    // save the settings to sampler item
hgs
parents:
diff changeset
   543
    RProfiler::SetSamplerAttributes(newSettings);
hgs
parents:
diff changeset
   544
    
hgs
parents:
diff changeset
   545
    // make sure that the title of the application is correct
hgs
parents:
diff changeset
   546
    CEikStatusPane* sp = iEnv->AppUiFactory()->StatusPane();
hgs
parents:
diff changeset
   547
    CAknTitlePane* tp = static_cast<CAknTitlePane*>( sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
hgs
parents:
diff changeset
   548
    tp->SetTextL(KAppName);
hgs
parents:
diff changeset
   549
hgs
parents:
diff changeset
   550
    return returnValue;
hgs
parents:
diff changeset
   551
    }
hgs
parents:
diff changeset
   552
hgs
parents:
diff changeset
   553
hgs
parents:
diff changeset
   554
void CProfilerGuiModel::SamplerInfoL(TSamplerAttributes& aItem)
hgs
parents:
diff changeset
   555
    {
hgs
parents:
diff changeset
   556
    TBuf<64> header;
hgs
parents:
diff changeset
   557
    TBuf<256> info;
hgs
parents:
diff changeset
   558
    
hgs
parents:
diff changeset
   559
    _LIT(KSamplerStr, "Sampler Info");
hgs
parents:
diff changeset
   560
    
hgs
parents:
diff changeset
   561
//    CnvUtfConverter::ConvertToUnicodeFromUtf8(header, aItem.iName);
hgs
parents:
diff changeset
   562
    
hgs
parents:
diff changeset
   563
    header.Append(KSamplerStr);
hgs
parents:
diff changeset
   564
hgs
parents:
diff changeset
   565
    CnvUtfConverter::ConvertToUnicodeFromUtf8(info, aItem.iDescription);
hgs
parents:
diff changeset
   566
hgs
parents:
diff changeset
   567
    CAknMessageQueryDialog* dialog = new(ELeave) CAknMessageQueryDialog;
hgs
parents:
diff changeset
   568
    //dialog->ExecuteLD(info);
hgs
parents:
diff changeset
   569
    dialog->PrepareLC( R_PROFILER_GUI_EMPTY_ABOUT_DIALOG );
hgs
parents:
diff changeset
   570
    dialog->SetHeaderText(header);
hgs
parents:
diff changeset
   571
    dialog->SetMessageTextL(info);
hgs
parents:
diff changeset
   572
    dialog->RunLD(); 
hgs
parents:
diff changeset
   573
hgs
parents:
diff changeset
   574
    RefreshViewL(EFalse);
hgs
parents:
diff changeset
   575
    }
hgs
parents:
diff changeset
   576
hgs
parents:
diff changeset
   577
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   578
hgs
parents:
diff changeset
   579
void CProfilerGuiModel::StartAllSamplerItemsL(TProfilingMode aProfilingMode)
hgs
parents:
diff changeset
   580
    {
hgs
parents:
diff changeset
   581
    TBuf<256> activeWriterDes;
hgs
parents:
diff changeset
   582
    TBuf8<256> writer8;
hgs
parents:
diff changeset
   583
    
hgs
parents:
diff changeset
   584
    iState = MProfilerStatusObserver::EInitializing;
hgs
parents:
diff changeset
   585
    
hgs
parents:
diff changeset
   586
    RProfiler::TProfilingMode profilingMode = aProfilingMode == EProfilingModeTimed ? RProfiler::EProfilingModeTimed : RProfiler::EProfilingModeNormal;
hgs
parents:
diff changeset
   587
    
hgs
parents:
diff changeset
   588
    // update status pane to correspond the initializing mode
hgs
parents:
diff changeset
   589
    // prevent the control of sampler specific settings during the trace 
hgs
parents:
diff changeset
   590
    iMainContainer->SetDimmed(ETrue);
hgs
parents:
diff changeset
   591
    
hgs
parents:
diff changeset
   592
    // update status pane
hgs
parents:
diff changeset
   593
    iMainView->UpdateStatusPaneL(iState);
hgs
parents:
diff changeset
   594
    
hgs
parents:
diff changeset
   595
    // refresh view
hgs
parents:
diff changeset
   596
    RefreshViewL();
hgs
parents:
diff changeset
   597
    
hgs
parents:
diff changeset
   598
    // try to start profiling process through client-server interface
hgs
parents:
diff changeset
   599
    if(RProfiler::StartSampling(profilingMode) == KErrNotFound)
hgs
parents:
diff changeset
   600
        {
hgs
parents:
diff changeset
   601
        
hgs
parents:
diff changeset
   602
        // profiler stopped (e.g. from eshell) and must be restarted 
hgs
parents:
diff changeset
   603
        LaunchProfilerEngineL();
hgs
parents:
diff changeset
   604
        
hgs
parents:
diff changeset
   605
        // set general attributes
hgs
parents:
diff changeset
   606
        SaveGeneralSettingsL();
hgs
parents:
diff changeset
   607
        
hgs
parents:
diff changeset
   608
        // set sampler attributes
hgs
parents:
diff changeset
   609
        for(TInt i(0);i<iSamplerAttributes->Count();i++)
hgs
parents:
diff changeset
   610
            {
hgs
parents:
diff changeset
   611
            // set the attributes for each sampler loaded in the UI
hgs
parents:
diff changeset
   612
            RProfiler::SetSamplerAttributes(iSamplerAttributes->At(i));
hgs
parents:
diff changeset
   613
            }
hgs
parents:
diff changeset
   614
        
hgs
parents:
diff changeset
   615
        // try to launch sampling again
hgs
parents:
diff changeset
   616
        RProfiler::StartSampling(profilingMode);
hgs
parents:
diff changeset
   617
        }
hgs
parents:
diff changeset
   618
    
hgs
parents:
diff changeset
   619
    // get selected writer
hgs
parents:
diff changeset
   620
    RProfiler::GetActiveWriter(activeWriterDes);
hgs
parents:
diff changeset
   621
    CnvUtfConverter::ConvertFromUnicodeToUtf8(writer8, activeWriterDes);
hgs
parents:
diff changeset
   622
    
hgs
parents:
diff changeset
   623
    // check that output mode has not changed for a problem with trace file name
hgs
parents:
diff changeset
   624
    // problem cases:
hgs
parents:
diff changeset
   625
    // - trace file name and/or path false
hgs
parents:
diff changeset
   626
    // - disk full, cannot write to given location
hgs
parents:
diff changeset
   627
    // - false drive, e.g. x:
hgs
parents:
diff changeset
   628
    if(writer8.CompareF(iGeneralAttributes.iTraceOutput) != 0)
hgs
parents:
diff changeset
   629
        {
hgs
parents:
diff changeset
   630
        // save change also to general attributes
hgs
parents:
diff changeset
   631
        iGeneralAttributes.iTraceOutput.Copy(writer8);
hgs
parents:
diff changeset
   632
        // show an info popup showing the logging method
hgs
parents:
diff changeset
   633
        iMainContainer->ShowWriterInfoPopupL(KWarningNote);
hgs
parents:
diff changeset
   634
        }
hgs
parents:
diff changeset
   635
    else
hgs
parents:
diff changeset
   636
        {
hgs
parents:
diff changeset
   637
        // show an info popup showing the logging method
hgs
parents:
diff changeset
   638
        iMainContainer->ShowWriterInfoPopupL(KNullDesC);
hgs
parents:
diff changeset
   639
        }
hgs
parents:
diff changeset
   640
    
hgs
parents:
diff changeset
   641
    // update the view
hgs
parents:
diff changeset
   642
    RefreshViewL();    
hgs
parents:
diff changeset
   643
    }
hgs
parents:
diff changeset
   644
    
hgs
parents:
diff changeset
   645
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   646
hgs
parents:
diff changeset
   647
void CProfilerGuiModel::DeleteAllSamplerItemsL()
hgs
parents:
diff changeset
   648
    {
hgs
parents:
diff changeset
   649
    DeleteAllSamplerItems();
hgs
parents:
diff changeset
   650
    
hgs
parents:
diff changeset
   651
    RefreshViewL();
hgs
parents:
diff changeset
   652
    }
hgs
parents:
diff changeset
   653
hgs
parents:
diff changeset
   654
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   655
hgs
parents:
diff changeset
   656
void CProfilerGuiModel::StopAllSamplerItemsL()
hgs
parents:
diff changeset
   657
    {
hgs
parents:
diff changeset
   658
    // show an info popup showing the logging method
hgs
parents:
diff changeset
   659
    iMainContainer->ShowWriterInfoPopupL(KNullDesC);
hgs
parents:
diff changeset
   660
    
hgs
parents:
diff changeset
   661
    // Stop profiling process through CS session
hgs
parents:
diff changeset
   662
    RProfiler::StopSampling();
hgs
parents:
diff changeset
   663
    
hgs
parents:
diff changeset
   664
    RefreshViewL();
hgs
parents:
diff changeset
   665
    }
hgs
parents:
diff changeset
   666
    
hgs
parents:
diff changeset
   667
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   668
hgs
parents:
diff changeset
   669
void CProfilerGuiModel::RefreshViewL(TBool aClearSelection)
hgs
parents:
diff changeset
   670
    {
hgs
parents:
diff changeset
   671
    // refresh the main list view
hgs
parents:
diff changeset
   672
    if (iMainContainer && iDrawState == EDrawStateMain && iMainContainer->ListBox())
hgs
parents:
diff changeset
   673
        {
hgs
parents:
diff changeset
   674
        // clear selections if any
hgs
parents:
diff changeset
   675
        iMainContainer->ListBox()->ClearSelection();
hgs
parents:
diff changeset
   676
        
hgs
parents:
diff changeset
   677
        // set item index to 0
hgs
parents:
diff changeset
   678
        if (aClearSelection)
hgs
parents:
diff changeset
   679
            iMainContainer->ListBox()->SetCurrentItemIndex(0); 
hgs
parents:
diff changeset
   680
        
hgs
parents:
diff changeset
   681
        // set text items
hgs
parents:
diff changeset
   682
        iMainContainer->SetListBoxTextArrayL(GenerateListBoxItemTextArrayL());
hgs
parents:
diff changeset
   683
        }
hgs
parents:
diff changeset
   684
    }
hgs
parents:
diff changeset
   685
        
hgs
parents:
diff changeset
   686
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   687
hgs
parents:
diff changeset
   688
void CProfilerGuiModel::AppendToSamplerItemListL(TSamplerAttributes& aItem)
hgs
parents:
diff changeset
   689
    {
hgs
parents:
diff changeset
   690
    // append single sampler item into sampler item list
hgs
parents:
diff changeset
   691
    if (iSamplerItemList)
hgs
parents:
diff changeset
   692
        iSamplerItemList->AppendL( aItem );
hgs
parents:
diff changeset
   693
    else
hgs
parents:
diff changeset
   694
        User::Leave(KErrNotReady);
hgs
parents:
diff changeset
   695
    }
hgs
parents:
diff changeset
   696
hgs
parents:
diff changeset
   697
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   698
hgs
parents:
diff changeset
   699
void CProfilerGuiModel::DisableOrEnableFromSamplerItemListL(TInt aIndex)
hgs
parents:
diff changeset
   700
    {
hgs
parents:
diff changeset
   701
    if (iSamplerItemList)
hgs
parents:
diff changeset
   702
        {
hgs
parents:
diff changeset
   703
        if (iSamplerItemList->Count() > aIndex && aIndex >= 0)
hgs
parents:
diff changeset
   704
            {
hgs
parents:
diff changeset
   705
            TSamplerAttributes& attr = iSamplerItemList->At(aIndex);
hgs
parents:
diff changeset
   706
            if (attr.iEnabled)
hgs
parents:
diff changeset
   707
                {
hgs
parents:
diff changeset
   708
                attr.iEnabled = EFalse;
hgs
parents:
diff changeset
   709
                }
hgs
parents:
diff changeset
   710
            else if (!attr.iEnabled)
hgs
parents:
diff changeset
   711
                {
hgs
parents:
diff changeset
   712
                attr.iEnabled = ETrue;
hgs
parents:
diff changeset
   713
                }
hgs
parents:
diff changeset
   714
            // save settings to engine
hgs
parents:
diff changeset
   715
            RProfiler::SetSamplerAttributes(attr);
hgs
parents:
diff changeset
   716
            }
hgs
parents:
diff changeset
   717
        else
hgs
parents:
diff changeset
   718
            User::Leave(KErrNotFound);
hgs
parents:
diff changeset
   719
        }
hgs
parents:
diff changeset
   720
    else
hgs
parents:
diff changeset
   721
        {
hgs
parents:
diff changeset
   722
        User::Leave(KErrNotReady);
hgs
parents:
diff changeset
   723
        }
hgs
parents:
diff changeset
   724
hgs
parents:
diff changeset
   725
    }
hgs
parents:
diff changeset
   726
hgs
parents:
diff changeset
   727
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   728
hgs
parents:
diff changeset
   729
TInt CProfilerGuiModel::SamplerItemCount() const
hgs
parents:
diff changeset
   730
    {
hgs
parents:
diff changeset
   731
    TInt count(0);
hgs
parents:
diff changeset
   732
    
hgs
parents:
diff changeset
   733
    if (iSamplerItemList)
hgs
parents:
diff changeset
   734
        count = iSamplerItemList->Count();
hgs
parents:
diff changeset
   735
    
hgs
parents:
diff changeset
   736
    return count;
hgs
parents:
diff changeset
   737
    }
hgs
parents:
diff changeset
   738
    
hgs
parents:
diff changeset
   739
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   740
hgs
parents:
diff changeset
   741
void CProfilerGuiModel::DeleteAllSamplerItems()
hgs
parents:
diff changeset
   742
    {
hgs
parents:
diff changeset
   743
    // reset sampler array
hgs
parents:
diff changeset
   744
    iSamplerItemList->Reset();    
hgs
parents:
diff changeset
   745
    }  
hgs
parents:
diff changeset
   746
          
hgs
parents:
diff changeset
   747
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   748
hgs
parents:
diff changeset
   749
CDesCArray* CProfilerGuiModel::GenerateListBoxItemTextArrayL()
hgs
parents:
diff changeset
   750
    {
hgs
parents:
diff changeset
   751
    CDesCArray* textArray = new(ELeave) CDesCArrayFlat(64);
hgs
parents:
diff changeset
   752
    CleanupStack::PushL(textArray);
hgs
parents:
diff changeset
   753
hgs
parents:
diff changeset
   754
    _LIT(KEntryTemplateRedIcon,   "1\t%S\t\t");
hgs
parents:
diff changeset
   755
    _LIT(KEntryTemplateGreenIcon, "2\t%S\t\t");
hgs
parents:
diff changeset
   756
    
hgs
parents:
diff changeset
   757
    TSamplerAttributes attr;
hgs
parents:
diff changeset
   758
    TInt itemCount(SamplerItemCount()); 
hgs
parents:
diff changeset
   759
    for (TInt i(0); i<itemCount; i++)
hgs
parents:
diff changeset
   760
        {
hgs
parents:
diff changeset
   761
        // add description from each entry
hgs
parents:
diff changeset
   762
        TBuf<512> textEntry;
hgs
parents:
diff changeset
   763
        TBuf<512> description; 
hgs
parents:
diff changeset
   764
hgs
parents:
diff changeset
   765
        attr = iSamplerItemList->At(i);
hgs
parents:
diff changeset
   766
        
hgs
parents:
diff changeset
   767
        description.Copy(attr.iName);
hgs
parents:
diff changeset
   768
        
hgs
parents:
diff changeset
   769
        if (attr.iEnabled)
hgs
parents:
diff changeset
   770
            textEntry.Format(KEntryTemplateGreenIcon, &description);
hgs
parents:
diff changeset
   771
        else
hgs
parents:
diff changeset
   772
            textEntry.Format(KEntryTemplateRedIcon, &description);
hgs
parents:
diff changeset
   773
        
hgs
parents:
diff changeset
   774
        textArray->AppendL(textEntry);
hgs
parents:
diff changeset
   775
        }    
hgs
parents:
diff changeset
   776
    
hgs
parents:
diff changeset
   777
    CleanupStack::Pop(); //textArray
hgs
parents:
diff changeset
   778
    return textArray;
hgs
parents:
diff changeset
   779
    }
hgs
parents:
diff changeset
   780
hgs
parents:
diff changeset
   781
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   782
hgs
parents:
diff changeset
   783
TBool CProfilerGuiModel::GetSelectedItemEnabled()
hgs
parents:
diff changeset
   784
    {
hgs
parents:
diff changeset
   785
    TInt currentItemIndex = iMainContainer->CurrentListBoxItemIndex();
hgs
parents:
diff changeset
   786
    
hgs
parents:
diff changeset
   787
    if (SamplerItemCount() > currentItemIndex && currentItemIndex >= 0)
hgs
parents:
diff changeset
   788
        {
hgs
parents:
diff changeset
   789
        return iSamplerItemList->At(currentItemIndex).iEnabled;
hgs
parents:
diff changeset
   790
        }
hgs
parents:
diff changeset
   791
    return EFalse;
hgs
parents:
diff changeset
   792
    }
hgs
parents:
diff changeset
   793
hgs
parents:
diff changeset
   794
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   795
hgs
parents:
diff changeset
   796
TBool CProfilerGuiModel::GetSelectedItemHasSettings()
hgs
parents:
diff changeset
   797
    {
hgs
parents:
diff changeset
   798
    TInt currentItemIndex = iMainContainer->CurrentListBoxItemIndex();
hgs
parents:
diff changeset
   799
    
hgs
parents:
diff changeset
   800
    if (SamplerItemCount() > currentItemIndex && currentItemIndex >= 0)
hgs
parents:
diff changeset
   801
        {
hgs
parents:
diff changeset
   802
        if(iSamplerItemList->At(currentItemIndex).iItemCount != 0 || 
hgs
parents:
diff changeset
   803
                iSamplerItemList->At(currentItemIndex).iSampleRate != KErrNotFound)
hgs
parents:
diff changeset
   804
            {
hgs
parents:
diff changeset
   805
            return ETrue;
hgs
parents:
diff changeset
   806
            }
hgs
parents:
diff changeset
   807
        else
hgs
parents:
diff changeset
   808
            {
hgs
parents:
diff changeset
   809
            return EFalse;
hgs
parents:
diff changeset
   810
            }
hgs
parents:
diff changeset
   811
        }
hgs
parents:
diff changeset
   812
    return EFalse;
hgs
parents:
diff changeset
   813
    }
hgs
parents:
diff changeset
   814
hgs
parents:
diff changeset
   815
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   816
hgs
parents:
diff changeset
   817
TBool CProfilerGuiModel::GetSelectedItemHidden()
hgs
parents:
diff changeset
   818
    {
hgs
parents:
diff changeset
   819
    TInt currentItemIndex = iMainContainer->CurrentListBoxItemIndex();
hgs
parents:
diff changeset
   820
    
hgs
parents:
diff changeset
   821
    if (SamplerItemCount() > currentItemIndex && currentItemIndex >= 0)
hgs
parents:
diff changeset
   822
        {
hgs
parents:
diff changeset
   823
        if(iSamplerItemList->At(currentItemIndex).iIsHidden)
hgs
parents:
diff changeset
   824
            {
hgs
parents:
diff changeset
   825
            return ETrue;
hgs
parents:
diff changeset
   826
            }
hgs
parents:
diff changeset
   827
        else
hgs
parents:
diff changeset
   828
            {
hgs
parents:
diff changeset
   829
            return EFalse;
hgs
parents:
diff changeset
   830
            }
hgs
parents:
diff changeset
   831
        }
hgs
parents:
diff changeset
   832
    return EFalse;
hgs
parents:
diff changeset
   833
    }
hgs
parents:
diff changeset
   834
hgs
parents:
diff changeset
   835
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   836
hgs
parents:
diff changeset
   837
TInt CProfilerGuiModel::EditSelectedSamplerL(TInt index)
hgs
parents:
diff changeset
   838
    {
hgs
parents:
diff changeset
   839
    TSamplerAttributes sampler;
hgs
parents:
diff changeset
   840
    if(SamplerItemCount() > index && index >= 0)
hgs
parents:
diff changeset
   841
        {
hgs
parents:
diff changeset
   842
        sampler = iSamplerItemList->At(index);
hgs
parents:
diff changeset
   843
        return EditSamplerL(sampler);
hgs
parents:
diff changeset
   844
        }
hgs
parents:
diff changeset
   845
    return KErrNone;
hgs
parents:
diff changeset
   846
    }
hgs
parents:
diff changeset
   847
hgs
parents:
diff changeset
   848
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   849
hgs
parents:
diff changeset
   850
void CProfilerGuiModel::SelectedSamplerInfoL(TInt index)
hgs
parents:
diff changeset
   851
    {
hgs
parents:
diff changeset
   852
    if(SamplerItemCount() > index && index >= 0)
hgs
parents:
diff changeset
   853
        {
hgs
parents:
diff changeset
   854
        SamplerInfoL(iSamplerItemList->At(index));
hgs
parents:
diff changeset
   855
        }
hgs
parents:
diff changeset
   856
    }
hgs
parents:
diff changeset
   857
hgs
parents:
diff changeset
   858
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
   859
hgs
parents:
diff changeset
   860
void CProfilerGuiModel::ShowItemActionMenuL()
hgs
parents:
diff changeset
   861
    {
hgs
parents:
diff changeset
   862
    TInt currentItemIndex = iMainContainer->CurrentListBoxItemIndex();
hgs
parents:
diff changeset
   863
    
hgs
parents:
diff changeset
   864
    if (SamplerItemCount() > currentItemIndex && currentItemIndex >= 0)
hgs
parents:
diff changeset
   865
        {
hgs
parents:
diff changeset
   866
        // show a query dialog    
hgs
parents:
diff changeset
   867
        TInt queryIndex(0);
hgs
parents:
diff changeset
   868
        CAknListQueryDialog* listQueryDlg = new(ELeave) CAknListQueryDialog(&queryIndex);
hgs
parents:
diff changeset
   869
        TInt resource = 0;
hgs
parents:
diff changeset
   870
        TSamplerAttributes sampler = iSamplerItemList->At(currentItemIndex);
hgs
parents:
diff changeset
   871
        
hgs
parents:
diff changeset
   872
        // check if sampler enabled
hgs
parents:
diff changeset
   873
        if(sampler.iEnabled)
hgs
parents:
diff changeset
   874
        	{
hgs
parents:
diff changeset
   875
        	resource = R_ITEM_ACTION_QUERY_ENABLED;
hgs
parents:
diff changeset
   876
            }
hgs
parents:
diff changeset
   877
        else
hgs
parents:
diff changeset
   878
        	{
hgs
parents:
diff changeset
   879
        	resource = R_ITEM_ACTION_QUERY_DISABLED;
hgs
parents:
diff changeset
   880
        	}
hgs
parents:
diff changeset
   881
        
hgs
parents:
diff changeset
   882
        // check if sampler plugin hidden => don't allow starting and stopping of sampling
hgs
parents:
diff changeset
   883
        if(sampler.iIsHidden)
hgs
parents:
diff changeset
   884
        	{
hgs
parents:
diff changeset
   885
        	resource = R_ITEM_ACTION_QUERY_HIDDEN_START_STOP;
hgs
parents:
diff changeset
   886
        	}
hgs
parents:
diff changeset
   887
        else if(( sampler.iItemCount == 0 && 
hgs
parents:
diff changeset
   888
        		sampler.iSampleRate == KErrNotFound ) && 
hgs
parents:
diff changeset
   889
        		sampler.iEnabled )
hgs
parents:
diff changeset
   890
            {
hgs
parents:
diff changeset
   891
            resource = R_ITEM_ACTION_QUERY_HIDDEN_SETTINGS_ENABLED;
hgs
parents:
diff changeset
   892
            }
hgs
parents:
diff changeset
   893
        else if(( sampler.iItemCount == 0 && 
hgs
parents:
diff changeset
   894
                sampler.iSampleRate == KErrNotFound ) && 
hgs
parents:
diff changeset
   895
                !sampler.iEnabled )
hgs
parents:
diff changeset
   896
            {
hgs
parents:
diff changeset
   897
            resource = R_ITEM_ACTION_QUERY_HIDDEN_SETTINGS_DISABLED;
hgs
parents:
diff changeset
   898
            }
hgs
parents:
diff changeset
   899
        
hgs
parents:
diff changeset
   900
        // execute query dialog with the given resource
hgs
parents:
diff changeset
   901
        if (listQueryDlg->ExecuteLD(resource))
hgs
parents:
diff changeset
   902
            {
hgs
parents:
diff changeset
   903
            if(!sampler.iIsHidden)
hgs
parents:
diff changeset
   904
            	{
hgs
parents:
diff changeset
   905
            	if(sampler.iItemCount != 0 || 
hgs
parents:
diff changeset
   906
            	        sampler.iSampleRate != KErrNotFound )
hgs
parents:
diff changeset
   907
            	    {
hgs
parents:
diff changeset
   908
                    // enable/disable sampler
hgs
parents:
diff changeset
   909
                    if (queryIndex == EItemActionMenuTypeEnable)
hgs
parents:
diff changeset
   910
                        {
hgs
parents:
diff changeset
   911
                        DisableOrEnableSelectedOrHighlightedItemsL();
hgs
parents:
diff changeset
   912
                        }
hgs
parents:
diff changeset
   913
                    // edit sampler settings
hgs
parents:
diff changeset
   914
                    else if (queryIndex == EItemActionMenuTypeEditSettings - 1)
hgs
parents:
diff changeset
   915
                        {
hgs
parents:
diff changeset
   916
                        EditSamplerL(sampler);
hgs
parents:
diff changeset
   917
                        }
hgs
parents:
diff changeset
   918
                    // info
hgs
parents:
diff changeset
   919
                    else if (queryIndex == EItemActionMenuTypeInfo - 1)
hgs
parents:
diff changeset
   920
                        {
hgs
parents:
diff changeset
   921
                        SamplerInfoL(sampler);
hgs
parents:
diff changeset
   922
                        }
hgs
parents:
diff changeset
   923
            	    }
hgs
parents:
diff changeset
   924
            	else
hgs
parents:
diff changeset
   925
            	    {
hgs
parents:
diff changeset
   926
                    // special case, use raw query indexes
hgs
parents:
diff changeset
   927
                     if (queryIndex == 0)
hgs
parents:
diff changeset
   928
                         {
hgs
parents:
diff changeset
   929
                         DisableOrEnableSelectedOrHighlightedItemsL();
hgs
parents:
diff changeset
   930
                         }
hgs
parents:
diff changeset
   931
                     else if (queryIndex == 1)
hgs
parents:
diff changeset
   932
                         {
hgs
parents:
diff changeset
   933
                         SamplerInfoL(sampler);
hgs
parents:
diff changeset
   934
                         }
hgs
parents:
diff changeset
   935
            	    }
hgs
parents:
diff changeset
   936
            	}
hgs
parents:
diff changeset
   937
            else
hgs
parents:
diff changeset
   938
				{
hgs
parents:
diff changeset
   939
				if(sampler.iItemCount != 0 || 
hgs
parents:
diff changeset
   940
				        sampler.iSampleRate != KErrNotFound)
hgs
parents:
diff changeset
   941
					{
hgs
parents:
diff changeset
   942
					// special case, use raw query indexes
hgs
parents:
diff changeset
   943
					// edit sampler settings
hgs
parents:
diff changeset
   944
					if (queryIndex == 0)
hgs
parents:
diff changeset
   945
						{
hgs
parents:
diff changeset
   946
						EditSamplerL(sampler);
hgs
parents:
diff changeset
   947
						}
hgs
parents:
diff changeset
   948
					// sampler info
hgs
parents:
diff changeset
   949
					else if (queryIndex == 1)
hgs
parents:
diff changeset
   950
						{
hgs
parents:
diff changeset
   951
						SamplerInfoL(sampler);
hgs
parents:
diff changeset
   952
						}
hgs
parents:
diff changeset
   953
					}
hgs
parents:
diff changeset
   954
				else
hgs
parents:
diff changeset
   955
					{
hgs
parents:
diff changeset
   956
					// only sampler info available if hidden and no setting items to be set
hgs
parents:
diff changeset
   957
					if (queryIndex == 0)
hgs
parents:
diff changeset
   958
						{
hgs
parents:
diff changeset
   959
						SamplerInfoL(sampler);
hgs
parents:
diff changeset
   960
						}
hgs
parents:
diff changeset
   961
					
hgs
parents:
diff changeset
   962
					}
hgs
parents:
diff changeset
   963
				}
hgs
parents:
diff changeset
   964
            }
hgs
parents:
diff changeset
   965
        }
hgs
parents:
diff changeset
   966
    }
hgs
parents:
diff changeset
   967
hgs
parents:
diff changeset
   968
void CProfilerGuiModel::DisableOrEnableSelectedOrHighlightedItemsL()
hgs
parents:
diff changeset
   969
    {
hgs
parents:
diff changeset
   970
    const CArrayFix<TInt>* selectionIndexes = iMainContainer->ListBoxSelectionIndexes();
hgs
parents:
diff changeset
   971
hgs
parents:
diff changeset
   972
    // by default use selected items
hgs
parents:
diff changeset
   973
    if (selectionIndexes && selectionIndexes->Count() > 0)
hgs
parents:
diff changeset
   974
        {
hgs
parents:
diff changeset
   975
        TInt ref(0);
hgs
parents:
diff changeset
   976
        TKeyArrayFix key(0, ECmpTUint16);
hgs
parents:
diff changeset
   977
        TInt index(0);
hgs
parents:
diff changeset
   978
hgs
parents:
diff changeset
   979
        for (TInt i=0; i<SamplerItemCount(); i++)
hgs
parents:
diff changeset
   980
            {
hgs
parents:
diff changeset
   981
            ref = i;
hgs
parents:
diff changeset
   982
hgs
parents:
diff changeset
   983
            if (selectionIndexes->Find(ref, key, index) == 0)  
hgs
parents:
diff changeset
   984
                {
hgs
parents:
diff changeset
   985
                DisableOrEnableFromSamplerItemListL(i);
hgs
parents:
diff changeset
   986
                }
hgs
parents:
diff changeset
   987
            }
hgs
parents:
diff changeset
   988
        
hgs
parents:
diff changeset
   989
        RefreshViewL(EFalse);
hgs
parents:
diff changeset
   990
        }
hgs
parents:
diff changeset
   991
    
hgs
parents:
diff changeset
   992
    // or if none selected, use the current item index
hgs
parents:
diff changeset
   993
    else
hgs
parents:
diff changeset
   994
        {
hgs
parents:
diff changeset
   995
        TInt currentItemIndex = iMainContainer->CurrentListBoxItemIndex();
hgs
parents:
diff changeset
   996
        
hgs
parents:
diff changeset
   997
        if (SamplerItemCount() > currentItemIndex && currentItemIndex >= 0)
hgs
parents:
diff changeset
   998
            {
hgs
parents:
diff changeset
   999
            DisableOrEnableFromSamplerItemListL(currentItemIndex);
hgs
parents:
diff changeset
  1000
            
hgs
parents:
diff changeset
  1001
            RefreshViewL(EFalse);
hgs
parents:
diff changeset
  1002
            }
hgs
parents:
diff changeset
  1003
        }  
hgs
parents:
diff changeset
  1004
    }
hgs
parents:
diff changeset
  1005
hgs
parents:
diff changeset
  1006
void CProfilerGuiModel::LoadPluginsL()
hgs
parents:
diff changeset
  1007
	{
hgs
parents:
diff changeset
  1008
    // get samplers from Profiler Engine (client-server session) 
hgs
parents:
diff changeset
  1009
	// and add the to the samplers list for the first time
hgs
parents:
diff changeset
  1010
    LOGTEXT(_L("CProfilerGuiModel::LoadPlugins - get sampler plugins"));
hgs
parents:
diff changeset
  1011
    TInt err = RProfiler::GetSamplerAttributes(*iSamplerAttributes);
hgs
parents:
diff changeset
  1012
    
hgs
parents:
diff changeset
  1013
    // check if engine provided a list of samplers
hgs
parents:
diff changeset
  1014
    if( err != KErrNone )
hgs
parents:
diff changeset
  1015
        {
hgs
parents:
diff changeset
  1016
        // could not get samplers from engine
hgs
parents:
diff changeset
  1017
        LOGTEXT(_L("CProfilerGuiModel::LoadPlugins - failed to connect engine"));
hgs
parents:
diff changeset
  1018
        }
hgs
parents:
diff changeset
  1019
    else
hgs
parents:
diff changeset
  1020
        {
hgs
parents:
diff changeset
  1021
        LOGTEXT(_L("CProfilerGuiModel::LoadPlugins - adding new samplers into view"));
hgs
parents:
diff changeset
  1022
        AddNewSamplersL(*iSamplerAttributes);
hgs
parents:
diff changeset
  1023
        }
hgs
parents:
diff changeset
  1024
    
hgs
parents:
diff changeset
  1025
    LOGTEXT(_L("CProfilerGuiModel::LoadPlugins - exit"));
hgs
parents:
diff changeset
  1026
	}
hgs
parents:
diff changeset
  1027
hgs
parents:
diff changeset
  1028
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1029
hgs
parents:
diff changeset
  1030
TInt CProfilerGuiModel::LoadGeneralSettingsL()
hgs
parents:
diff changeset
  1031
    {
hgs
parents:
diff changeset
  1032
    // local variable for getting saved settings from profiler engine
hgs
parents:
diff changeset
  1033
    TGeneralAttributes generalAttr;
hgs
parents:
diff changeset
  1034
    TInt err(KErrNone);
hgs
parents:
diff changeset
  1035
    
hgs
parents:
diff changeset
  1036
    // before loading saved settings (from settings file) set the default values 
hgs
parents:
diff changeset
  1037
    iGeneralAttributes.iTraceOutput.Copy(KTraceOutput);
hgs
parents:
diff changeset
  1038
    iGeneralAttributes.iTraceFilePrefix.Copy(KProfilerDefaultPrefix);
hgs
parents:
diff changeset
  1039
    iGeneralAttributes.iSaveFileDrive.Copy(KProfilerDefaultDrive);
hgs
parents:
diff changeset
  1040
    iGeneralAttributes.iTimedSamplingPeriod = KDefaultTimedSamplingPeriod;
hgs
parents:
diff changeset
  1041
    
hgs
parents:
diff changeset
  1042
    // request to 
hgs
parents:
diff changeset
  1043
    err = RProfiler::GetGeneralAttributes(generalAttr);
hgs
parents:
diff changeset
  1044
    
hgs
parents:
diff changeset
  1045
    // check that request succesfull
hgs
parents:
diff changeset
  1046
    if( err != KErrNone )
hgs
parents:
diff changeset
  1047
        {
hgs
parents:
diff changeset
  1048
        // could not connect profiler engine, use 
hgs
parents:
diff changeset
  1049
        return err;
hgs
parents:
diff changeset
  1050
        }
hgs
parents:
diff changeset
  1051
    
hgs
parents:
diff changeset
  1052
    // check if saved settings different than the default
hgs
parents:
diff changeset
  1053
    if(generalAttr.iTraceOutput.MatchF(iGeneralAttributes.iTraceOutput) == KErrNotFound)
hgs
parents:
diff changeset
  1054
        {
hgs
parents:
diff changeset
  1055
        iGeneralAttributes.iTraceOutput.Copy(generalAttr.iTraceOutput);
hgs
parents:
diff changeset
  1056
        }
hgs
parents:
diff changeset
  1057
hgs
parents:
diff changeset
  1058
    if(generalAttr.iTraceFilePrefix.MatchF(iGeneralAttributes.iTraceFilePrefix) == KErrNotFound)
hgs
parents:
diff changeset
  1059
        {
hgs
parents:
diff changeset
  1060
        iGeneralAttributes.iTraceFilePrefix.Copy(generalAttr.iTraceFilePrefix);
hgs
parents:
diff changeset
  1061
        }
hgs
parents:
diff changeset
  1062
hgs
parents:
diff changeset
  1063
    if(generalAttr.iSaveFileDrive.MatchF(iGeneralAttributes.iSaveFileDrive) == KErrNotFound)
hgs
parents:
diff changeset
  1064
        {
hgs
parents:
diff changeset
  1065
        iGeneralAttributes.iSaveFileDrive.Copy(generalAttr.iSaveFileDrive);
hgs
parents:
diff changeset
  1066
        }
hgs
parents:
diff changeset
  1067
    
hgs
parents:
diff changeset
  1068
    if( generalAttr.iTimedSamplingPeriod > 0)
hgs
parents:
diff changeset
  1069
        {
hgs
parents:
diff changeset
  1070
        iGeneralAttributes.iTimedSamplingPeriod = generalAttr.iTimedSamplingPeriod;
hgs
parents:
diff changeset
  1071
        }
hgs
parents:
diff changeset
  1072
    
hgs
parents:
diff changeset
  1073
    return err;
hgs
parents:
diff changeset
  1074
    }
hgs
parents:
diff changeset
  1075
hgs
parents:
diff changeset
  1076
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1077
hgs
parents:
diff changeset
  1078
void CProfilerGuiModel::SaveGeneralSettingsL()
hgs
parents:
diff changeset
  1079
    {
hgs
parents:
diff changeset
  1080
    TInt err(KErrNone);
hgs
parents:
diff changeset
  1081
    
hgs
parents:
diff changeset
  1082
    // save general attributes to Profiler Engine
hgs
parents:
diff changeset
  1083
    err = RProfiler::SetGeneralAttributes(iGeneralAttributes);
hgs
parents:
diff changeset
  1084
    
hgs
parents:
diff changeset
  1085
    // check if save failed
hgs
parents:
diff changeset
  1086
    if(err == KErrNotFound)
hgs
parents:
diff changeset
  1087
        {
hgs
parents:
diff changeset
  1088
        // profiler stopped (e.g. from eshell) and must be restarted 
hgs
parents:
diff changeset
  1089
        LaunchProfilerEngineL();
hgs
parents:
diff changeset
  1090
        
hgs
parents:
diff changeset
  1091
        err = RProfiler::SetGeneralAttributes(iGeneralAttributes);
hgs
parents:
diff changeset
  1092
        if(err != KErrNone)
hgs
parents:
diff changeset
  1093
            {
hgs
parents:
diff changeset
  1094
            // leave no use to continue
hgs
parents:
diff changeset
  1095
            User::Leave(err);
hgs
parents:
diff changeset
  1096
            }
hgs
parents:
diff changeset
  1097
        }
hgs
parents:
diff changeset
  1098
    }
hgs
parents:
diff changeset
  1099
hgs
parents:
diff changeset
  1100
void CProfilerGuiModel::SetMainView(CProfilerGuiMainView* aMainView)
hgs
parents:
diff changeset
  1101
    {
hgs
parents:
diff changeset
  1102
    iMainView = aMainView;
hgs
parents:
diff changeset
  1103
    }
hgs
parents:
diff changeset
  1104
hgs
parents:
diff changeset
  1105
// --------------------------------------------------------------------------------------------
hgs
parents:
diff changeset
  1106
hgs
parents:
diff changeset
  1107
void CProfilerGuiModel::HandleProfilerStatusChange( KProfilerStatus aStatus )
hgs
parents:
diff changeset
  1108
    {
hgs
parents:
diff changeset
  1109
    iState = aStatus;
hgs
parents:
diff changeset
  1110
    if( aStatus == EIdle )
hgs
parents:
diff changeset
  1111
        {
hgs
parents:
diff changeset
  1112
        iMainContainer->ShowWriterInfoPopupL(KNullDesC);
hgs
parents:
diff changeset
  1113
        // set plugin list back to enabled
hgs
parents:
diff changeset
  1114
        iMainContainer->SetDimmed(EFalse);
hgs
parents:
diff changeset
  1115
        }
hgs
parents:
diff changeset
  1116
    TRAP_IGNORE(iMainView->UpdateStatusPaneL(aStatus));
hgs
parents:
diff changeset
  1117
    }
hgs
parents:
diff changeset
  1118
hgs
parents:
diff changeset
  1119
void CProfilerGuiModel::HandleProfilerErrorL( TInt aError )
hgs
parents:
diff changeset
  1120
    {
hgs
parents:
diff changeset
  1121
    TBuf<64> errorMsg;
hgs
parents:
diff changeset
  1122
    _LIT(KErrorMessage, "Error: ");
hgs
parents:
diff changeset
  1123
    _LIT(KNoMemory, "Cannot write to file, check settings");
hgs
parents:
diff changeset
  1124
    
hgs
parents:
diff changeset
  1125
    errorMsg.Copy(KErrorMessage);
hgs
parents:
diff changeset
  1126
    // message from pwr sampler
hgs
parents:
diff changeset
  1127
    if( aError < -1000 )
hgs
parents:
diff changeset
  1128
        {
hgs
parents:
diff changeset
  1129
        errorMsg.Append(_L("Stop other power measurement tools!"));
hgs
parents:
diff changeset
  1130
        }
hgs
parents:
diff changeset
  1131
    else if( aError == KErrAlreadyExists || aError == 11 )
hgs
parents:
diff changeset
  1132
        {
hgs
parents:
diff changeset
  1133
        errorMsg.Append(_L("Close old Profiler before start!"));
hgs
parents:
diff changeset
  1134
        }
hgs
parents:
diff changeset
  1135
    else if( aError == KErrNotReady )
hgs
parents:
diff changeset
  1136
        {
hgs
parents:
diff changeset
  1137
        errorMsg.Append(_L("Memory card removed, failed to write!"));
hgs
parents:
diff changeset
  1138
        }
hgs
parents:
diff changeset
  1139
    else if( aError == KErrPathNotFound )
hgs
parents:
diff changeset
  1140
        {
hgs
parents:
diff changeset
  1141
        errorMsg.Append(_L("Given trace data location does not exist"));
hgs
parents:
diff changeset
  1142
        }
hgs
parents:
diff changeset
  1143
    else
hgs
parents:
diff changeset
  1144
        {
hgs
parents:
diff changeset
  1145
        if( aError == KErrNoMemory || 
hgs
parents:
diff changeset
  1146
                aError == KErrOverflow || 
hgs
parents:
diff changeset
  1147
                aError == KErrDirFull || 
hgs
parents:
diff changeset
  1148
                aError == KErrDiskFull || 
hgs
parents:
diff changeset
  1149
                aError == KErrNotReady )
hgs
parents:
diff changeset
  1150
            {
hgs
parents:
diff changeset
  1151
            errorMsg.Append(KNoMemory);
hgs
parents:
diff changeset
  1152
            }
hgs
parents:
diff changeset
  1153
        else
hgs
parents:
diff changeset
  1154
            {
hgs
parents:
diff changeset
  1155
            errorMsg.Append(_L("code: "));
hgs
parents:
diff changeset
  1156
            errorMsg.AppendNum(aError);
hgs
parents:
diff changeset
  1157
            }
hgs
parents:
diff changeset
  1158
        }
hgs
parents:
diff changeset
  1159
    // simply show an error note
hgs
parents:
diff changeset
  1160
    CAknErrorNote* note = new(ELeave) CAknErrorNote();
hgs
parents:
diff changeset
  1161
    note->ExecuteLD(errorMsg);
hgs
parents:
diff changeset
  1162
    
hgs
parents:
diff changeset
  1163
    // set state idle in all error cases
hgs
parents:
diff changeset
  1164
    iState = MProfilerStatusObserver::EIdle;
hgs
parents:
diff changeset
  1165
    
hgs
parents:
diff changeset
  1166
    // update status pane
hgs
parents:
diff changeset
  1167
    iMainView->UpdateStatusPaneL(iState);
hgs
parents:
diff changeset
  1168
    
hgs
parents:
diff changeset
  1169
    // set plugin list back to enabled
hgs
parents:
diff changeset
  1170
    iMainContainer->SetDimmed(EFalse);
hgs
parents:
diff changeset
  1171
    
hgs
parents:
diff changeset
  1172
    // refresh and set menus etc. in correct state
hgs
parents:
diff changeset
  1173
    RefreshViewL();
hgs
parents:
diff changeset
  1174
    }
hgs
parents:
diff changeset
  1175
hgs
parents:
diff changeset
  1176
// End of File