perfsrv/piprofiler/piprofiler_plat/inc/ProfilerSession.h
author hgs
Tue, 26 Oct 2010 16:20:32 +0300
changeset 62 1c2bb2fc7c87
parent 51 98307c651589
permissions -rw-r--r--
201043
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
20
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
#ifndef __PROFILER_SESSION_H__
hgs
parents:
diff changeset
    20
#define __PROFILER_SESSION_H__
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include <e32base.h>
hgs
parents:
diff changeset
    23
#include <e32svr.h>
hgs
parents:
diff changeset
    24
#include <piprofiler/ProfilerConfig.h>
hgs
parents:
diff changeset
    25
#include <piprofiler/ProfilerVersion.h>
hgs
parents:
diff changeset
    26
#include <piprofiler/ProfilerTraces.h>
hgs
parents:
diff changeset
    27
#include <piprofiler/ProfilerAttributes.h>
hgs
parents:
diff changeset
    28
hgs
parents:
diff changeset
    29
_LIT(KProfilerName,"PIProfilerEngine");
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
/**
hgs
parents:
diff changeset
    32
 * The RProfiler class provides a functional interface to the sampling profiler.
hgs
parents:
diff changeset
    33
 *
hgs
parents:
diff changeset
    34
 * The engine must already be running for this interface to work, this can be
hgs
parents:
diff changeset
    35
 * achieved by executing PIProfilerEngine.exe. The control methods are all static, and 
hgs
parents:
diff changeset
    36
 * require no other context.
hgs
parents:
diff changeset
    37
 */
hgs
parents:
diff changeset
    38
NONSHARABLE_CLASS( RProfiler ) : public RSessionBase
hgs
parents:
diff changeset
    39
	{
hgs
parents:
diff changeset
    40
public:
hgs
parents:
diff changeset
    41
	enum TCommand {	
hgs
parents:
diff changeset
    42
		// profiler controls
hgs
parents:
diff changeset
    43
		EStartSampling = 1,
hgs
parents:
diff changeset
    44
		EStartTimedSampling,
hgs
parents:
diff changeset
    45
		EStopSampling,
hgs
parents:
diff changeset
    46
//		ELoadSettings,
hgs
parents:
diff changeset
    47
		EExitProfiler,
hgs
parents:
diff changeset
    48
		EFinalise,
hgs
parents:
diff changeset
    49
		EAttachClient,
hgs
parents:
diff changeset
    50
		ERemoveClient,
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
		// general attributes
hgs
parents:
diff changeset
    53
		EGetGeneralAttributes,
hgs
parents:
diff changeset
    54
		EGetSamplerAttributes,
hgs
parents:
diff changeset
    55
		EGetSamplerAttributeCount,
hgs
parents:
diff changeset
    56
		ESetGeneralAttributes,
hgs
parents:
diff changeset
    57
		ESetSamplerAttributes,
hgs
parents:
diff changeset
    58
		
hgs
parents:
diff changeset
    59
		// generic settings
hgs
parents:
diff changeset
    60
		ESetTraceFilePrefix, 
hgs
parents:
diff changeset
    61
		ESetTraceFileDrive,
hgs
parents:
diff changeset
    62
		EGetSamplerVersion,
hgs
parents:
diff changeset
    63
		EGetFileName,
hgs
parents:
diff changeset
    64
		EGetActiveWriter,
hgs
parents:
diff changeset
    65
		ERefreshProfilerStatus
hgs
parents:
diff changeset
    66
		};
hgs
parents:
diff changeset
    67
	
hgs
parents:
diff changeset
    68
	enum TSamplerState {
hgs
parents:
diff changeset
    69
		EIdle = 0, 
hgs
parents:
diff changeset
    70
		EInitializing, 
hgs
parents:
diff changeset
    71
		ERunning, 
hgs
parents:
diff changeset
    72
		EStopping, 
hgs
parents:
diff changeset
    73
		EStopped
hgs
parents:
diff changeset
    74
		};
hgs
parents:
diff changeset
    75
	
hgs
parents:
diff changeset
    76
	enum TProfilingMode
hgs
parents:
diff changeset
    77
	    {
hgs
parents:
diff changeset
    78
	    EProfilingModeNormal = 0,
hgs
parents:
diff changeset
    79
	    EProfilingModeTimed
hgs
parents:
diff changeset
    80
	    };
hgs
parents:
diff changeset
    81
public:
hgs
parents:
diff changeset
    82
	
hgs
parents:
diff changeset
    83
	
hgs
parents:
diff changeset
    84
	/*
hgs
parents:
diff changeset
    85
	 * 
hgs
parents:
diff changeset
    86
	 *  Methods for commanding Profiler Engine
hgs
parents:
diff changeset
    87
	 *   
hgs
parents:
diff changeset
    88
	 */
hgs
parents:
diff changeset
    89
	
hgs
parents:
diff changeset
    90
	// get general settings
hgs
parents:
diff changeset
    91
	static inline TInt GetGeneralAttributes(TGeneralAttributes& aAttributes);
hgs
parents:
diff changeset
    92
	
hgs
parents:
diff changeset
    93
	// get samplers; names, settings, states, descriptions etc. in one array containing all sampler attributes
hgs
parents:
diff changeset
    94
	static inline TInt GetSamplerAttributes(CArrayFixFlat<TSamplerAttributes>& aAttributeArray);
hgs
parents:
diff changeset
    95
	
hgs
parents:
diff changeset
    96
	// save settings back to engine and plugins
hgs
parents:
diff changeset
    97
	static inline TInt SetGeneralAttributes(TGeneralAttributes aAttributes);
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
	// save settings back to engine and plugins
hgs
parents:
diff changeset
   100
    static inline TInt SetSamplerAttributes(TSamplerAttributes aAttributes);
hgs
parents:
diff changeset
   101
    
hgs
parents:
diff changeset
   102
    // refresh profiler engine status
hgs
parents:
diff changeset
   103
    static inline TInt RefreshProfilerStatus();	
hgs
parents:
diff changeset
   104
	
hgs
parents:
diff changeset
   105
    /** Start sampling */
hgs
parents:
diff changeset
   106
	static inline TInt StartSampling(TProfilingMode aProfilingMode = EProfilingModeNormal);
hgs
parents:
diff changeset
   107
	/** Stop sampling */
hgs
parents:
diff changeset
   108
	static inline TInt StopSampling();
hgs
parents:
diff changeset
   109
    /** Load settings */
hgs
parents:
diff changeset
   110
//    static inline TInt LoadSettings(TDesC& aSettingsFile);
hgs
parents:
diff changeset
   111
	/** Exit profiler */
hgs
parents:
diff changeset
   112
	static inline TInt ExitProfiler();
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
	/** Get file name */
hgs
parents:
diff changeset
   115
	static inline TInt GetFileName(TDes&);
hgs
parents:
diff changeset
   116
    /** Get active writer */
hgs
parents:
diff changeset
   117
    static inline TInt GetActiveWriter(TDes&);
hgs
parents:
diff changeset
   118
	/** Perform a test case */
hgs
parents:
diff changeset
   119
	static inline TInt Test(TUint32 testCase);
hgs
parents:
diff changeset
   120
	/** Issue a control request to the engine without data*/
hgs
parents:
diff changeset
   121
	static inline TInt ControlState(TCommand aRequest);
hgs
parents:
diff changeset
   122
	/** Issue a control request to the engine with descriptor data to write there*/
hgs
parents:
diff changeset
   123
	static inline TInt ControlWrite(TCommand aRequest,TDesC& data);
hgs
parents:
diff changeset
   124
	/** Issue a control request to the engine with numeric and descriptor data to write there*/
hgs
parents:
diff changeset
   125
	static inline TInt ControlWrite(TCommand aRequest,TInt numData, TDesC& data);
hgs
parents:
diff changeset
   126
	/** Issue a control request to read descriptor data from the engine*/
hgs
parents:
diff changeset
   127
	static inline TInt ControlRead(TCommand aRequest,TDes& data);
hgs
parents:
diff changeset
   128
	/** Actually sends the message to profiler engine*/	
hgs
parents:
diff changeset
   129
	static inline TInt PerformControl(	TCommand aRequest,
hgs
parents:
diff changeset
   130
										TDesC* fromDescriptor = NULL,
hgs
parents:
diff changeset
   131
										TUint32 numData1 = 0,
hgs
parents:
diff changeset
   132
										TDes* toDescriptor = NULL,
hgs
parents:
diff changeset
   133
										TUint32 numData2 = 0xffffffff);
hgs
parents:
diff changeset
   134
	
hgs
parents:
diff changeset
   135
	static inline TInt AttachClient();
hgs
parents:
diff changeset
   136
	static inline TInt RemoveClient();
hgs
parents:
diff changeset
   137
hgs
parents:
diff changeset
   138
private:
hgs
parents:
diff changeset
   139
	inline RProfiler();
hgs
parents:
diff changeset
   140
	};
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
inline RProfiler::RProfiler()
hgs
parents:
diff changeset
   143
	{}
hgs
parents:
diff changeset
   144
hgs
parents:
diff changeset
   145
//
hgs
parents:
diff changeset
   146
// Connect to the profiler engine, and issue the control request if successful
hgs
parents:
diff changeset
   147
//
hgs
parents:
diff changeset
   148
inline TInt RProfiler::ControlState(TCommand aRequest)
hgs
parents:
diff changeset
   149
    { return PerformControl(aRequest); }
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
//
hgs
parents:
diff changeset
   152
// Connect to the profiler engine, and issue the control request if successful
hgs
parents:
diff changeset
   153
//
hgs
parents:
diff changeset
   154
inline TInt RProfiler::ControlWrite(TCommand aRequest,TDesC& data)
hgs
parents:
diff changeset
   155
    { return PerformControl(aRequest,&data,0); }
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
//
hgs
parents:
diff changeset
   158
// Connect to the profiler engine, and issue the control request if successful
hgs
parents:
diff changeset
   159
//
hgs
parents:
diff changeset
   160
inline TInt RProfiler::ControlWrite(TCommand aRequest,TInt numData, TDesC& data)
hgs
parents:
diff changeset
   161
    { return PerformControl(aRequest,&data,numData); }
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
//
hgs
parents:
diff changeset
   164
// Connect to the profiler engine, and issue the control request if successful
hgs
parents:
diff changeset
   165
//
hgs
parents:
diff changeset
   166
inline TInt RProfiler::ControlRead(TCommand aRequest,TDes& data)
hgs
parents:
diff changeset
   167
    { return PerformControl(aRequest,0,0,&data); }
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
inline TInt RProfiler::PerformControl(TCommand aRequest,TDesC* fromDescriptor,TUint32 numData1,TDes* toDescriptor,TUint32 numData2)
hgs
parents:
diff changeset
   170
	{
hgs
parents:
diff changeset
   171
	LOGTEXT(_L("Creating a session to profiler"));
hgs
parents:
diff changeset
   172
	RProfiler p;
hgs
parents:
diff changeset
   173
	TUint count(0);
hgs
parents:
diff changeset
   174
	TInt r(KErrNone);
hgs
parents:
diff changeset
   175
hgs
parents:
diff changeset
   176
	// in boot measurement mode, count until 30s
hgs
parents:
diff changeset
   177
	#ifdef PROFILER_BOOT_MEASUREMENT
hgs
parents:
diff changeset
   178
	while(count < 60)
hgs
parents:
diff changeset
   179
	#else
hgs
parents:
diff changeset
   180
	while(count < 6)
hgs
parents:
diff changeset
   181
	#endif
hgs
parents:
diff changeset
   182
		{
hgs
parents:
diff changeset
   183
		r = p.CreateSession(KProfilerName, TVersion(), 0);
hgs
parents:
diff changeset
   184
		if (r == KErrNone)
hgs
parents:
diff changeset
   185
			{
hgs
parents:
diff changeset
   186
			LOGSTRING2("Succeeded, sending a message %d", aRequest);
hgs
parents:
diff changeset
   187
			LOGSTRING5(" - parameters 0x%x 0x%x 0x%x 0x%x",fromDescriptor,numData1,toDescriptor,numData2);
hgs
parents:
diff changeset
   188
			TInt err = KErrNone;
hgs
parents:
diff changeset
   189
hgs
parents:
diff changeset
   190
			TIpcArgs a;
hgs
parents:
diff changeset
   191
			a.Set(0,fromDescriptor);
hgs
parents:
diff changeset
   192
			a.Set(1,numData1);
hgs
parents:
diff changeset
   193
			a.Set(2,toDescriptor);
hgs
parents:
diff changeset
   194
			a.Set(3,numData2);
hgs
parents:
diff changeset
   195
			err = p.SendReceive(aRequest,a);
hgs
parents:
diff changeset
   196
hgs
parents:
diff changeset
   197
			p.RSessionBase::Close();
hgs
parents:
diff changeset
   198
			
hgs
parents:
diff changeset
   199
			if(err != KErrNone)
hgs
parents:
diff changeset
   200
				{
hgs
parents:
diff changeset
   201
				LOGSTRING2("Profiler responded with an error - code %d !!",err);		
hgs
parents:
diff changeset
   202
				return err;
hgs
parents:
diff changeset
   203
				}
hgs
parents:
diff changeset
   204
			else
hgs
parents:
diff changeset
   205
				{ 
hgs
parents:
diff changeset
   206
				LOGTEXT(_L("OK, message sent, closing"));
hgs
parents:
diff changeset
   207
				return KErrNone;
hgs
parents:
diff changeset
   208
				}
hgs
parents:
diff changeset
   209
			}
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
		LOGSTRING2("Error in opening session to profiler - code %d !!",r);
hgs
parents:
diff changeset
   212
		//#ifdef PROFILER_BOOT_MEASUREMENT
hgs
parents:
diff changeset
   213
		// there was an error contacting the Profiler
hgs
parents:
diff changeset
   214
		// indicates that the server is most probably not up
hgs
parents:
diff changeset
   215
		// however, since it should be(unless some resource is not yet ready)
hgs
parents:
diff changeset
   216
		// we can just wait
hgs
parents:
diff changeset
   217
		User::After(500000); // wait 1/2 s
hgs
parents:
diff changeset
   218
		count++;
hgs
parents:
diff changeset
   219
		//#else
hgs
parents:
diff changeset
   220
		// exit immediately on error
hgs
parents:
diff changeset
   221
		//return r;
hgs
parents:
diff changeset
   222
		//#endif
hgs
parents:
diff changeset
   223
		}
hgs
parents:
diff changeset
   224
	return r;
hgs
parents:
diff changeset
   225
	}
hgs
parents:
diff changeset
   226
hgs
parents:
diff changeset
   227
// the new UI access methods
hgs
parents:
diff changeset
   228
inline TInt RProfiler::GetGeneralAttributes(TGeneralAttributes& aAttributes)
hgs
parents:
diff changeset
   229
    {
hgs
parents:
diff changeset
   230
#ifdef _TEST_
hgs
parents:
diff changeset
   231
    _LIT(KDefaultTraceOutput,"debug_output");
hgs
parents:
diff changeset
   232
    _LIT(KDefaultTraceFilePrefix,"PIProfiler_#");
hgs
parents:
diff changeset
   233
    _LIT(KDefaultTraceFileSaveDrive,"E:\\");
hgs
parents:
diff changeset
   234
    aAttributes.iTraceOutput.Copy(KDefaultTraceOutput);
hgs
parents:
diff changeset
   235
    aAttributes.iTraceFilePrefix.Copy(KDefaultTraceFilePrefix);
hgs
parents:
diff changeset
   236
    aAttributes.iSaveFileDrive.Copy(KDefaultTraceFileSaveDrive);
hgs
parents:
diff changeset
   237
#else
hgs
parents:
diff changeset
   238
    LOGTEXT(_L("Creating a session to profiler"));
hgs
parents:
diff changeset
   239
    RProfiler p;
hgs
parents:
diff changeset
   240
    TInt r(KErrNone);
hgs
parents:
diff changeset
   241
    r = p.CreateSession(KProfilerName, TVersion(), 0);
hgs
parents:
diff changeset
   242
    if (r == KErrNone)
hgs
parents:
diff changeset
   243
        {
hgs
parents:
diff changeset
   244
        LOGSTRING2("Succeeded, sending a message %d", EGetGeneralAttributes);
hgs
parents:
diff changeset
   245
hgs
parents:
diff changeset
   246
        TPckg<TGeneralAttributes> attrPckg(aAttributes);
hgs
parents:
diff changeset
   247
        TIpcArgs a(&attrPckg);
hgs
parents:
diff changeset
   248
        r = p.SendReceive(RProfiler::EGetGeneralAttributes,a);
hgs
parents:
diff changeset
   249
        
hgs
parents:
diff changeset
   250
        p.RSessionBase::Close();
hgs
parents:
diff changeset
   251
        
hgs
parents:
diff changeset
   252
        if(r != KErrNone)
hgs
parents:
diff changeset
   253
            {
hgs
parents:
diff changeset
   254
            LOGSTRING2("Profiler responded with an error - code %d !!",r);        
hgs
parents:
diff changeset
   255
            return r;
hgs
parents:
diff changeset
   256
            }
hgs
parents:
diff changeset
   257
        else
hgs
parents:
diff changeset
   258
            { 
hgs
parents:
diff changeset
   259
            LOGTEXT(_L("OK, message sent, closing"));
hgs
parents:
diff changeset
   260
            return KErrNone;
hgs
parents:
diff changeset
   261
            }
hgs
parents:
diff changeset
   262
        }
hgs
parents:
diff changeset
   263
#endif
hgs
parents:
diff changeset
   264
    return r;   // return error code  
hgs
parents:
diff changeset
   265
    }
hgs
parents:
diff changeset
   266
inline TInt RProfiler::GetSamplerAttributes(CArrayFixFlat<TSamplerAttributes>& aAttributes)
hgs
parents:
diff changeset
   267
    {
hgs
parents:
diff changeset
   268
#ifdef _TEST_
hgs
parents:
diff changeset
   269
    _LIT(KDefaultTraceOutput,"debug_output");
hgs
parents:
diff changeset
   270
    _LIT(KDefaultTraceFilePrefix,"PIProfiler_#");
hgs
parents:
diff changeset
   271
    _LIT(KDefaultTraceFileSaveDrive,"E:\\");
hgs
parents:
diff changeset
   272
    aAttributes.iTraceOutput.Copy(KDefaultTraceOutput);
hgs
parents:
diff changeset
   273
    aAttributes.iTraceFilePrefix.Copy(KDefaultTraceFilePrefix);
hgs
parents:
diff changeset
   274
    aAttributes.iSaveFileDrive.Copy(KDefaultTraceFileSaveDrive);
hgs
parents:
diff changeset
   275
#else
hgs
parents:
diff changeset
   276
    // do receive stream of TSamplerAttributes
hgs
parents:
diff changeset
   277
    LOGTEXT(_L("Creating a session to profiler"));
hgs
parents:
diff changeset
   278
    RProfiler p;
hgs
parents:
diff changeset
   279
    TInt r(KErrNone);
hgs
parents:
diff changeset
   280
    r = p.CreateSession(KProfilerName, TVersion(), 0);
hgs
parents:
diff changeset
   281
    if (r == KErrNone)
hgs
parents:
diff changeset
   282
        {
hgs
parents:
diff changeset
   283
        TInt attrCount(0);
hgs
parents:
diff changeset
   284
        TPckg<TInt> pckg(attrCount);
hgs
parents:
diff changeset
   285
        TIpcArgs args(&pckg);
hgs
parents:
diff changeset
   286
        
hgs
parents:
diff changeset
   287
        r = p.SendReceive(RProfiler::EGetSamplerAttributeCount, args);
hgs
parents:
diff changeset
   288
        
hgs
parents:
diff changeset
   289
        HBufC8* buffer = HBufC8::NewL(attrCount*sizeof(TSamplerAttributes));
hgs
parents:
diff changeset
   290
        TPtr8 ptr(buffer->Des());
hgs
parents:
diff changeset
   291
        TIpcArgs args2(&ptr);
hgs
parents:
diff changeset
   292
        r = p.SendReceive(RProfiler::EGetSamplerAttributes, args2);
hgs
parents:
diff changeset
   293
        
hgs
parents:
diff changeset
   294
        TInt len(ptr.Length());
hgs
parents:
diff changeset
   295
        TInt pos(0);
hgs
parents:
diff changeset
   296
        while (pos != len)
hgs
parents:
diff changeset
   297
           {
hgs
parents:
diff changeset
   298
           TPckgBuf<TSamplerAttributes> attrPckg;
hgs
parents:
diff changeset
   299
           attrPckg.Copy(ptr.Mid(pos, attrPckg.Length()));
hgs
parents:
diff changeset
   300
           pos += attrPckg.Length();
hgs
parents:
diff changeset
   301
    
hgs
parents:
diff changeset
   302
           aAttributes.AppendL(attrPckg());
hgs
parents:
diff changeset
   303
           }
hgs
parents:
diff changeset
   304
        
hgs
parents:
diff changeset
   305
        p.RSessionBase::Close();
62
hgs
parents: 51
diff changeset
   306
        delete buffer;
hgs
parents: 51
diff changeset
   307
        buffer = NULL;
20
hgs
parents:
diff changeset
   308
        if(r != KErrNone)
hgs
parents:
diff changeset
   309
            {
62
hgs
parents: 51
diff changeset
   310
            LOGSTRING2("Profiler responded with an error - code %d !!",r);
20
hgs
parents:
diff changeset
   311
            return r;
hgs
parents:
diff changeset
   312
            }
hgs
parents:
diff changeset
   313
        else
hgs
parents:
diff changeset
   314
            { 
hgs
parents:
diff changeset
   315
            LOGTEXT(_L("OK, message sent, closing"));
hgs
parents:
diff changeset
   316
            return KErrNone;
hgs
parents:
diff changeset
   317
            }
hgs
parents:
diff changeset
   318
        }
hgs
parents:
diff changeset
   319
#endif
hgs
parents:
diff changeset
   320
    return KErrNone; 
hgs
parents:
diff changeset
   321
    }
hgs
parents:
diff changeset
   322
hgs
parents:
diff changeset
   323
inline TInt RProfiler::SetGeneralAttributes(TGeneralAttributes aAttributes)
hgs
parents:
diff changeset
   324
    {
hgs
parents:
diff changeset
   325
    // do receive stream of TSamplerAttributes
hgs
parents:
diff changeset
   326
    LOGTEXT(_L("Creating a session to profiler"));
hgs
parents:
diff changeset
   327
    RProfiler p;
hgs
parents:
diff changeset
   328
    TInt r(KErrNone);
hgs
parents:
diff changeset
   329
    r = p.CreateSession(KProfilerName, TVersion(), 0);
hgs
parents:
diff changeset
   330
    if (r == KErrNone)
hgs
parents:
diff changeset
   331
        {
hgs
parents:
diff changeset
   332
hgs
parents:
diff changeset
   333
        TPckg<TGeneralAttributes> attrPckg(aAttributes);
hgs
parents:
diff changeset
   334
        TIpcArgs a(&attrPckg);
hgs
parents:
diff changeset
   335
        r = p.SendReceive(RProfiler::ESetGeneralAttributes,a);
hgs
parents:
diff changeset
   336
        
hgs
parents:
diff changeset
   337
        p.RSessionBase::Close();
hgs
parents:
diff changeset
   338
        
hgs
parents:
diff changeset
   339
        if(r != KErrNone)
hgs
parents:
diff changeset
   340
            {
hgs
parents:
diff changeset
   341
            LOGSTRING2("Profiler responded with an error - code %d !!",r);        
hgs
parents:
diff changeset
   342
            return r;
hgs
parents:
diff changeset
   343
            }
hgs
parents:
diff changeset
   344
        else
hgs
parents:
diff changeset
   345
            { 
hgs
parents:
diff changeset
   346
            LOGTEXT(_L("OK, message sent, closing"));
hgs
parents:
diff changeset
   347
            return KErrNone;
hgs
parents:
diff changeset
   348
            }
hgs
parents:
diff changeset
   349
        }
hgs
parents:
diff changeset
   350
    return r; 
hgs
parents:
diff changeset
   351
    }
hgs
parents:
diff changeset
   352
hgs
parents:
diff changeset
   353
// save settings back to engine and plugins
hgs
parents:
diff changeset
   354
inline TInt RProfiler::SetSamplerAttributes(TSamplerAttributes aAttributes)
hgs
parents:
diff changeset
   355
    {
hgs
parents:
diff changeset
   356
    // do receive stream of TSamplerAttributes
hgs
parents:
diff changeset
   357
    LOGTEXT(_L("Creating a session to profiler"));
hgs
parents:
diff changeset
   358
    RProfiler p;
hgs
parents:
diff changeset
   359
    TInt r(KErrNone);
hgs
parents:
diff changeset
   360
    r = p.CreateSession(KProfilerName, TVersion(), 0);
hgs
parents:
diff changeset
   361
    if (r == KErrNone)
hgs
parents:
diff changeset
   362
        {
hgs
parents:
diff changeset
   363
hgs
parents:
diff changeset
   364
        TPckg<TSamplerAttributes> attrPckg(aAttributes);
hgs
parents:
diff changeset
   365
        
hgs
parents:
diff changeset
   366
        TIpcArgs a;
hgs
parents:
diff changeset
   367
        a.Set(0,&attrPckg);
hgs
parents:
diff changeset
   368
hgs
parents:
diff changeset
   369
        r = p.SendReceive(RProfiler::ESetSamplerAttributes,a);
hgs
parents:
diff changeset
   370
        
hgs
parents:
diff changeset
   371
        p.RSessionBase::Close();
hgs
parents:
diff changeset
   372
        
hgs
parents:
diff changeset
   373
        if(r != KErrNone)
hgs
parents:
diff changeset
   374
            {
hgs
parents:
diff changeset
   375
            LOGSTRING2("Profiler responded with an error - code %d !!",r);        
hgs
parents:
diff changeset
   376
            return r;
hgs
parents:
diff changeset
   377
            }
hgs
parents:
diff changeset
   378
        else
hgs
parents:
diff changeset
   379
            { 
hgs
parents:
diff changeset
   380
            LOGTEXT(_L("OK, message sent, closing"));
hgs
parents:
diff changeset
   381
            return KErrNone;
hgs
parents:
diff changeset
   382
            }
hgs
parents:
diff changeset
   383
        }
hgs
parents:
diff changeset
   384
    return r; 
hgs
parents:
diff changeset
   385
    }
hgs
parents:
diff changeset
   386
hgs
parents:
diff changeset
   387
inline TInt RProfiler::RefreshProfilerStatus()
hgs
parents:
diff changeset
   388
    {return ControlState(RProfiler::ERefreshProfilerStatus); }
hgs
parents:
diff changeset
   389
hgs
parents:
diff changeset
   390
inline TInt RProfiler::StartSampling(RProfiler::TProfilingMode aProfilingMode)
hgs
parents:
diff changeset
   391
	{
hgs
parents:
diff changeset
   392
    RProfiler::TCommand command = RProfiler::EStartSampling;
hgs
parents:
diff changeset
   393
    if( aProfilingMode == RProfiler::EProfilingModeTimed )
hgs
parents:
diff changeset
   394
        {
hgs
parents:
diff changeset
   395
        command = RProfiler::EStartTimedSampling;
hgs
parents:
diff changeset
   396
        }    
hgs
parents:
diff changeset
   397
    return ControlState(command);
hgs
parents:
diff changeset
   398
	}
hgs
parents:
diff changeset
   399
hgs
parents:
diff changeset
   400
inline TInt RProfiler::StopSampling()
hgs
parents:
diff changeset
   401
	{return ControlState(RProfiler::EStopSampling);}
hgs
parents:
diff changeset
   402
hgs
parents:
diff changeset
   403
inline TInt RProfiler::ExitProfiler()
hgs
parents:
diff changeset
   404
	{return ControlState(RProfiler::EExitProfiler);}
hgs
parents:
diff changeset
   405
hgs
parents:
diff changeset
   406
inline TInt RProfiler::AttachClient()
hgs
parents:
diff changeset
   407
    {return ControlState(RProfiler::EAttachClient);}
hgs
parents:
diff changeset
   408
hgs
parents:
diff changeset
   409
inline TInt RProfiler::RemoveClient()
hgs
parents:
diff changeset
   410
    {return ControlState(RProfiler::ERemoveClient);}
hgs
parents:
diff changeset
   411
hgs
parents:
diff changeset
   412
inline TInt RProfiler::GetFileName(TDes& fileName)
hgs
parents:
diff changeset
   413
	{return ControlRead(EGetFileName,fileName);}
hgs
parents:
diff changeset
   414
hgs
parents:
diff changeset
   415
inline TInt RProfiler::GetActiveWriter(TDes& writerDes)
hgs
parents:
diff changeset
   416
    {return ControlRead(EGetActiveWriter,writerDes);}
hgs
parents:
diff changeset
   417
hgs
parents:
diff changeset
   418
#endif // __PROFILER_SESSION_H__