kerneltest/e32test/misc/d_TestKernCoreStats.cpp
author hgs
Thu, 01 Jul 2010 17:57:33 +0100
changeset 189 a5496987b1da
permissions -rw-r--r--
201025_04
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
189
a5496987b1da 201025_04
hgs
parents:
diff changeset
     1
// Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
a5496987b1da 201025_04
hgs
parents:
diff changeset
     2
// All rights reserved.
a5496987b1da 201025_04
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
a5496987b1da 201025_04
hgs
parents:
diff changeset
     4
// under the terms of the License "Eclipse Public License v1.0"
a5496987b1da 201025_04
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
a5496987b1da 201025_04
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
a5496987b1da 201025_04
hgs
parents:
diff changeset
     7
//
a5496987b1da 201025_04
hgs
parents:
diff changeset
     8
// Initial Contributors:
a5496987b1da 201025_04
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
a5496987b1da 201025_04
hgs
parents:
diff changeset
    10
//
a5496987b1da 201025_04
hgs
parents:
diff changeset
    11
// Contributors:
a5496987b1da 201025_04
hgs
parents:
diff changeset
    12
//
a5496987b1da 201025_04
hgs
parents:
diff changeset
    13
// Description:
a5496987b1da 201025_04
hgs
parents:
diff changeset
    14
// e32test\misc\d_kerncorestas.cpp
a5496987b1da 201025_04
hgs
parents:
diff changeset
    15
// 
a5496987b1da 201025_04
hgs
parents:
diff changeset
    16
//
a5496987b1da 201025_04
hgs
parents:
diff changeset
    17
a5496987b1da 201025_04
hgs
parents:
diff changeset
    18
#include "d_TestKernCoreStats.h"
a5496987b1da 201025_04
hgs
parents:
diff changeset
    19
a5496987b1da 201025_04
hgs
parents:
diff changeset
    20
#include <kernel/kernel.h>
a5496987b1da 201025_04
hgs
parents:
diff changeset
    21
#include <kernel/kerncorestats.h>
a5496987b1da 201025_04
hgs
parents:
diff changeset
    22
a5496987b1da 201025_04
hgs
parents:
diff changeset
    23
a5496987b1da 201025_04
hgs
parents:
diff changeset
    24
class DTestKernCoreStatsFactory : public DLogicalDevice
a5496987b1da 201025_04
hgs
parents:
diff changeset
    25
        {
a5496987b1da 201025_04
hgs
parents:
diff changeset
    26
public:
a5496987b1da 201025_04
hgs
parents:
diff changeset
    27
        DTestKernCoreStatsFactory();
a5496987b1da 201025_04
hgs
parents:
diff changeset
    28
        ~DTestKernCoreStatsFactory();
a5496987b1da 201025_04
hgs
parents:
diff changeset
    29
        virtual TInt Install();
a5496987b1da 201025_04
hgs
parents:
diff changeset
    30
        virtual void GetCaps(TDes8& aDes) const;
a5496987b1da 201025_04
hgs
parents:
diff changeset
    31
        virtual TInt Create(DLogicalChannelBase*& aChannel);
a5496987b1da 201025_04
hgs
parents:
diff changeset
    32
        };
a5496987b1da 201025_04
hgs
parents:
diff changeset
    33
a5496987b1da 201025_04
hgs
parents:
diff changeset
    34
class DTestKernCoreStatsChannel : public DLogicalChannelBase
a5496987b1da 201025_04
hgs
parents:
diff changeset
    35
        {
a5496987b1da 201025_04
hgs
parents:
diff changeset
    36
public:
a5496987b1da 201025_04
hgs
parents:
diff changeset
    37
        DTestKernCoreStatsChannel();
a5496987b1da 201025_04
hgs
parents:
diff changeset
    38
        virtual ~DTestKernCoreStatsChannel();
a5496987b1da 201025_04
hgs
parents:
diff changeset
    39
        TInt Request(TInt aFunction, TAny* a1, TAny* a2);
a5496987b1da 201025_04
hgs
parents:
diff changeset
    40
        virtual TInt DoCreate(TInt aUnit, const TDesC8* anInfo, const TVersion&
a5496987b1da 201025_04
hgs
parents:
diff changeset
    41
aVer);
a5496987b1da 201025_04
hgs
parents:
diff changeset
    42
private:
a5496987b1da 201025_04
hgs
parents:
diff changeset
    43
	TInt GetStats(TAny* aBuffer);
a5496987b1da 201025_04
hgs
parents:
diff changeset
    44
	TInt Configure(TInt aMode);
a5496987b1da 201025_04
hgs
parents:
diff changeset
    45
	TInt DumpInfo();
a5496987b1da 201025_04
hgs
parents:
diff changeset
    46
private:
a5496987b1da 201025_04
hgs
parents:
diff changeset
    47
	TInt iLength;
a5496987b1da 201025_04
hgs
parents:
diff changeset
    48
        };
a5496987b1da 201025_04
hgs
parents:
diff changeset
    49
a5496987b1da 201025_04
hgs
parents:
diff changeset
    50
a5496987b1da 201025_04
hgs
parents:
diff changeset
    51
DECLARE_STANDARD_LDD()
a5496987b1da 201025_04
hgs
parents:
diff changeset
    52
        {
a5496987b1da 201025_04
hgs
parents:
diff changeset
    53
        return new DTestKernCoreStatsFactory;
a5496987b1da 201025_04
hgs
parents:
diff changeset
    54
        }
a5496987b1da 201025_04
hgs
parents:
diff changeset
    55
a5496987b1da 201025_04
hgs
parents:
diff changeset
    56
DTestKernCoreStatsFactory::DTestKernCoreStatsFactory()
a5496987b1da 201025_04
hgs
parents:
diff changeset
    57
        {
a5496987b1da 201025_04
hgs
parents:
diff changeset
    58
        }
a5496987b1da 201025_04
hgs
parents:
diff changeset
    59
a5496987b1da 201025_04
hgs
parents:
diff changeset
    60
DTestKernCoreStatsFactory::~DTestKernCoreStatsFactory()
a5496987b1da 201025_04
hgs
parents:
diff changeset
    61
        {
a5496987b1da 201025_04
hgs
parents:
diff changeset
    62
        }
a5496987b1da 201025_04
hgs
parents:
diff changeset
    63
a5496987b1da 201025_04
hgs
parents:
diff changeset
    64
TInt DTestKernCoreStatsFactory::Install()
a5496987b1da 201025_04
hgs
parents:
diff changeset
    65
        {
a5496987b1da 201025_04
hgs
parents:
diff changeset
    66
        return SetName(&KTestKernCoreStatsName);
a5496987b1da 201025_04
hgs
parents:
diff changeset
    67
        }
a5496987b1da 201025_04
hgs
parents:
diff changeset
    68
a5496987b1da 201025_04
hgs
parents:
diff changeset
    69
a5496987b1da 201025_04
hgs
parents:
diff changeset
    70
void DTestKernCoreStatsFactory::GetCaps(TDes8&) const
a5496987b1da 201025_04
hgs
parents:
diff changeset
    71
        {
a5496987b1da 201025_04
hgs
parents:
diff changeset
    72
        }
a5496987b1da 201025_04
hgs
parents:
diff changeset
    73
a5496987b1da 201025_04
hgs
parents:
diff changeset
    74
a5496987b1da 201025_04
hgs
parents:
diff changeset
    75
TInt DTestKernCoreStatsFactory::Create(DLogicalChannelBase*& aChannel)
a5496987b1da 201025_04
hgs
parents:
diff changeset
    76
        {
a5496987b1da 201025_04
hgs
parents:
diff changeset
    77
        aChannel=new DTestKernCoreStatsChannel();
a5496987b1da 201025_04
hgs
parents:
diff changeset
    78
        if(!aChannel)
a5496987b1da 201025_04
hgs
parents:
diff changeset
    79
                return KErrNoMemory;
a5496987b1da 201025_04
hgs
parents:
diff changeset
    80
a5496987b1da 201025_04
hgs
parents:
diff changeset
    81
        return KErrNone;
a5496987b1da 201025_04
hgs
parents:
diff changeset
    82
        }
a5496987b1da 201025_04
hgs
parents:
diff changeset
    83
a5496987b1da 201025_04
hgs
parents:
diff changeset
    84
DTestKernCoreStatsChannel::DTestKernCoreStatsChannel()
a5496987b1da 201025_04
hgs
parents:
diff changeset
    85
	{
a5496987b1da 201025_04
hgs
parents:
diff changeset
    86
	}
a5496987b1da 201025_04
hgs
parents:
diff changeset
    87
a5496987b1da 201025_04
hgs
parents:
diff changeset
    88
a5496987b1da 201025_04
hgs
parents:
diff changeset
    89
DTestKernCoreStatsChannel::~DTestKernCoreStatsChannel()
a5496987b1da 201025_04
hgs
parents:
diff changeset
    90
	{
a5496987b1da 201025_04
hgs
parents:
diff changeset
    91
	}
a5496987b1da 201025_04
hgs
parents:
diff changeset
    92
a5496987b1da 201025_04
hgs
parents:
diff changeset
    93
TInt DTestKernCoreStatsChannel::DoCreate(TInt, const TDesC8*, const TVersion&)
a5496987b1da 201025_04
hgs
parents:
diff changeset
    94
        {
a5496987b1da 201025_04
hgs
parents:
diff changeset
    95
        return KErrNone;
a5496987b1da 201025_04
hgs
parents:
diff changeset
    96
        }
a5496987b1da 201025_04
hgs
parents:
diff changeset
    97
a5496987b1da 201025_04
hgs
parents:
diff changeset
    98
TInt DTestKernCoreStatsChannel::Request(TInt aFunction, TAny* a1, TAny*)
a5496987b1da 201025_04
hgs
parents:
diff changeset
    99
        {
a5496987b1da 201025_04
hgs
parents:
diff changeset
   100
        switch (aFunction)
a5496987b1da 201025_04
hgs
parents:
diff changeset
   101
                {
a5496987b1da 201025_04
hgs
parents:
diff changeset
   102
                case RTestKernCoreStats::ERequestGetStats:
a5496987b1da 201025_04
hgs
parents:
diff changeset
   103
                        return GetStats( (TAny*) a1);
a5496987b1da 201025_04
hgs
parents:
diff changeset
   104
                case RTestKernCoreStats::ERequestConfigure:
a5496987b1da 201025_04
hgs
parents:
diff changeset
   105
                        return Configure( (TInt) a1);
a5496987b1da 201025_04
hgs
parents:
diff changeset
   106
                case RTestKernCoreStats::ERequestDumpInfo:
a5496987b1da 201025_04
hgs
parents:
diff changeset
   107
                        return DumpInfo();
a5496987b1da 201025_04
hgs
parents:
diff changeset
   108
                default:
a5496987b1da 201025_04
hgs
parents:
diff changeset
   109
                        return KErrNotSupported;
a5496987b1da 201025_04
hgs
parents:
diff changeset
   110
                }
a5496987b1da 201025_04
hgs
parents:
diff changeset
   111
        }
a5496987b1da 201025_04
hgs
parents:
diff changeset
   112
a5496987b1da 201025_04
hgs
parents:
diff changeset
   113
a5496987b1da 201025_04
hgs
parents:
diff changeset
   114
TInt DTestKernCoreStatsChannel::GetStats(TAny* aBuffer)
a5496987b1da 201025_04
hgs
parents:
diff changeset
   115
	{
a5496987b1da 201025_04
hgs
parents:
diff changeset
   116
	NKern::ThreadEnterCS();
a5496987b1da 201025_04
hgs
parents:
diff changeset
   117
	
a5496987b1da 201025_04
hgs
parents:
diff changeset
   118
	if (iLength==0)
a5496987b1da 201025_04
hgs
parents:
diff changeset
   119
		return KErrNone;
a5496987b1da 201025_04
hgs
parents:
diff changeset
   120
	
a5496987b1da 201025_04
hgs
parents:
diff changeset
   121
	TAny* tempBuff = Kern::Alloc(iLength);
a5496987b1da 201025_04
hgs
parents:
diff changeset
   122
	if (!tempBuff)
a5496987b1da 201025_04
hgs
parents:
diff changeset
   123
		{
a5496987b1da 201025_04
hgs
parents:
diff changeset
   124
		NKern::ThreadLeaveCS();
a5496987b1da 201025_04
hgs
parents:
diff changeset
   125
		return KErrNoMemory;
a5496987b1da 201025_04
hgs
parents:
diff changeset
   126
		}
a5496987b1da 201025_04
hgs
parents:
diff changeset
   127
a5496987b1da 201025_04
hgs
parents:
diff changeset
   128
	TInt r = KernCoreStats::Stats(tempBuff);
a5496987b1da 201025_04
hgs
parents:
diff changeset
   129
a5496987b1da 201025_04
hgs
parents:
diff changeset
   130
a5496987b1da 201025_04
hgs
parents:
diff changeset
   131
	if (r==KErrNone)
a5496987b1da 201025_04
hgs
parents:
diff changeset
   132
		kumemput(aBuffer, tempBuff, iLength);
a5496987b1da 201025_04
hgs
parents:
diff changeset
   133
a5496987b1da 201025_04
hgs
parents:
diff changeset
   134
	Kern::Free(tempBuff);
a5496987b1da 201025_04
hgs
parents:
diff changeset
   135
	NKern::ThreadLeaveCS();
a5496987b1da 201025_04
hgs
parents:
diff changeset
   136
a5496987b1da 201025_04
hgs
parents:
diff changeset
   137
	return r;
a5496987b1da 201025_04
hgs
parents:
diff changeset
   138
	}
a5496987b1da 201025_04
hgs
parents:
diff changeset
   139
a5496987b1da 201025_04
hgs
parents:
diff changeset
   140
TInt DTestKernCoreStatsChannel::Configure(TInt aMode)
a5496987b1da 201025_04
hgs
parents:
diff changeset
   141
	{
a5496987b1da 201025_04
hgs
parents:
diff changeset
   142
a5496987b1da 201025_04
hgs
parents:
diff changeset
   143
	NKern::ThreadEnterCS();
a5496987b1da 201025_04
hgs
parents:
diff changeset
   144
	TInt cores = NKern::NumberOfCpus();
a5496987b1da 201025_04
hgs
parents:
diff changeset
   145
a5496987b1da 201025_04
hgs
parents:
diff changeset
   146
	TInt len = 0;
a5496987b1da 201025_04
hgs
parents:
diff changeset
   147
	len+= (aMode & KStatsCoreTotalTimeInIdle)?		sizeof(TUint)*cores :0;
a5496987b1da 201025_04
hgs
parents:
diff changeset
   148
	len+= (aMode & KStatsTimeCrossIdleAndActive)?		sizeof(TUint)*(cores+1) :0;
a5496987b1da 201025_04
hgs
parents:
diff changeset
   149
	len+= (aMode & KStatsCoreNumTimesInIdle)?		sizeof(TUint)*cores :0;
a5496987b1da 201025_04
hgs
parents:
diff changeset
   150
	len+= (aMode & KStatsNumEvents)?			sizeof(TUint) :0;
a5496987b1da 201025_04
hgs
parents:
diff changeset
   151
	len+= (aMode & KStatsReadyStateChanges)?		sizeof(TUint)*2:0;
a5496987b1da 201025_04
hgs
parents:
diff changeset
   152
	len+= (aMode & KStatsNumTimeSliceExpire)?		sizeof(TUint):0;
a5496987b1da 201025_04
hgs
parents:
diff changeset
   153
a5496987b1da 201025_04
hgs
parents:
diff changeset
   154
	iLength=len;
a5496987b1da 201025_04
hgs
parents:
diff changeset
   155
	Kern::Printf("KernCoreStats packet length = %d", len);
a5496987b1da 201025_04
hgs
parents:
diff changeset
   156
	TInt r =  KernCoreStats::Configure(aMode);
a5496987b1da 201025_04
hgs
parents:
diff changeset
   157
	NKern::ThreadLeaveCS();
a5496987b1da 201025_04
hgs
parents:
diff changeset
   158
	return r;
a5496987b1da 201025_04
hgs
parents:
diff changeset
   159
	}
a5496987b1da 201025_04
hgs
parents:
diff changeset
   160
a5496987b1da 201025_04
hgs
parents:
diff changeset
   161
a5496987b1da 201025_04
hgs
parents:
diff changeset
   162
TInt DTestKernCoreStatsChannel::DumpInfo()
a5496987b1da 201025_04
hgs
parents:
diff changeset
   163
	{
a5496987b1da 201025_04
hgs
parents:
diff changeset
   164
a5496987b1da 201025_04
hgs
parents:
diff changeset
   165
	//KernCoreStats::Engage(0);
a5496987b1da 201025_04
hgs
parents:
diff changeset
   166
a5496987b1da 201025_04
hgs
parents:
diff changeset
   167
	return iLength;
a5496987b1da 201025_04
hgs
parents:
diff changeset
   168
	}