17 |
17 |
18 |
18 |
19 #ifndef PROFILERGENERICCLASSESKRN_H |
19 #ifndef PROFILERGENERICCLASSESKRN_H |
20 #define PROFILERGENERICCLASSESKRN_H |
20 #define PROFILERGENERICCLASSESKRN_H |
21 |
21 |
22 #include <piprofiler/ProfilerGenericClassesCommon.h> |
22 #include <piprofiler/ProfilerGenericClassesCommon.h> |
23 #include <piprofiler/ProfilerTraces.h> |
23 #include <piprofiler/ProfilerTraces.h> |
24 |
24 |
25 #include <e32cmn.h> |
25 #include <e32cmn.h> |
26 |
26 |
27 #define PROFILER_KERNEL_MODE |
27 #define PROFILER_KERNEL_MODE |
28 |
28 |
29 #ifdef PROFILER_KERNEL_MODE |
29 #ifdef PROFILER_KERNEL_MODE |
|
30 |
|
31 #ifdef __SMP__ |
|
32 static TSpinLock BufferStateSpinLock = TSpinLock(TSpinLock::EOrderGenericIrqLow3); |
|
33 static TSpinLock WriteSpinLock = TSpinLock(TSpinLock::EOrderGenericIrqLow3); |
|
34 #endif |
|
35 |
30 class DProfilerSampleBuffer; |
36 class DProfilerSampleBuffer; |
31 |
37 |
32 class DProfilerSampleStream |
38 class DProfilerSampleStream |
33 { |
39 { |
34 public: |
40 public: |
35 DProfilerSampleStream(); |
41 DProfilerSampleStream(); |
36 ~DProfilerSampleStream(); |
42 ~DProfilerSampleStream(); |
37 |
43 |
38 void InsertCurrentClient(DThread* aClient); |
44 void InsertCurrentClient(DThread* aClient); |
39 void AddSampleBuffer(TBapBuf* aBuffer,TRequestStatus* aStatus); |
45 void AddSampleBuffer(TBapBuf* aBuffer,TRequestStatus* aStatus); |
40 void ReleaseIfPending(); |
46 void ReleaseIfPending(); |
41 |
47 |
42 void AddSamples(DProfilerSampleBuffer& aBuffer, TInt aSamplerId); |
48 void AddSamples(DProfilerSampleBuffer& aBuffer, TInt aSamplerId); |
43 TInt EndSampling(DProfilerSampleBuffer& aBuffer,TInt aSamplerId); |
49 TInt EndSampling(DProfilerSampleBuffer& aBuffer,TInt aSamplerId); |
44 |
50 |
45 void PerformCopy(TUint8 aSamplerId,TUint8* aSrc,TPtr8* dst,TInt aOffset,TInt aAmount); |
51 void PerformCopy(TUint8 aSamplerId,TUint8* aSrc,TPtr8* dst,TInt aOffset,TInt aAmount); |
46 |
52 |
47 private: |
53 private: |
48 TBapBuf* iCurrentBuffer; |
54 TBapBuf* iCurrentBuffer; |
49 TRequestStatus* iPendingRequest; |
55 TRequestStatus* iPendingRequest; |
50 DThread* iClient; |
56 DThread* iClient; |
51 TInt iAddingSamples; |
57 TInt iAddingSamples; |
52 }; |
58 }; |
53 |
59 |
54 class DProfilerSampleBuffer : public DBase |
60 class DProfilerSampleBuffer : public DBase |
55 { |
61 { |
56 friend class DProfilerSampleStream; |
62 friend class DProfilerSampleStream; |
57 public: |
63 public: |
58 |
64 |
59 enum ProfilerBufferStatus |
65 enum ProfilerBufferStatus |
60 { |
66 { |
61 BufferOk, |
67 BufferOk, |
62 BufferCopyAsap, |
68 BufferCopyAsap, |
63 BufferBeingCopied, |
69 BufferBeingCopied, |
64 BufferFull, |
70 BufferFull, |
65 BufferDataEnd |
71 BufferDataEnd |
66 }; |
72 }; |
67 |
73 |
68 DProfilerSampleBuffer(TUint8* aBuffer, TUint8* aDblBuffer, TUint32 aSize); |
74 DProfilerSampleBuffer(TUint8* aBuffer, TUint8* aDblBuffer, TUint32 aSize); |
69 ~DProfilerSampleBuffer(); |
75 ~DProfilerSampleBuffer(); |
70 TInt AddSample(TUint8* aSample, TUint32 aLength); |
76 TInt AddSample(TUint8* aSample, TUint32 aLength); |
71 TUint32 GetBufferStatus(); |
77 TUint32 GetBufferStatus(); |
72 void ClearBuffer(); |
78 void ClearBuffer(); |
73 void EndSampling(); |
79 void EndSampling(); |
74 void DataCopied(); |
80 void DataCopied(); |
75 |
81 |
76 TUint32 iBufferStatus; |
|
77 private: |
82 private: |
78 TUint32 iBytesWritten; |
83 TUint32 iBufferStatus; |
79 TUint32 iDblBytesWritten; |
84 TUint32 iBytesWritten; |
80 TUint32 iDblBytesRead; |
85 TUint32 iDblBytesWritten; |
81 |
86 TUint32 iDblBytesRead; |
82 TUint32 iBufferDataSize; |
87 |
83 TUint32 iBufferRealSize; |
88 TUint32 iBufferDataSize; |
84 |
89 TUint32 iBufferRealSize; |
85 TProfilerSampleBufStruct* iDblBufStruct; |
90 |
86 TProfilerSampleBufStruct* iBufStruct; |
91 TProfilerSampleBufStruct* iDblBufStruct; |
|
92 TProfilerSampleBufStruct* iBufStruct; |
87 }; |
93 }; |
88 |
94 |
89 #endif |
95 #endif |
90 |
96 |
91 |
97 |
92 |
98 |
93 /* |
99 /* |
94 * |
100 * |
95 * Abstract class CProfilerSamplerBase definition |
101 * Abstract class CProfilerSamplerBase definition |
96 * |
102 * |
97 */ |
103 */ |
98 |
104 |
99 #ifdef PROFILER_KERNEL_MODE |
105 #ifdef PROFILER_KERNEL_MODE |
100 class DProfilerSamplerBase : public DBase |
106 class DProfilerSamplerBase : public DBase |
101 { |
107 { |
102 public: |
108 public: |
103 DProfilerSamplerBase(); |
109 DProfilerSamplerBase(); |
104 virtual ~DProfilerSamplerBase(); |
110 virtual ~DProfilerSamplerBase(); |
105 |
111 |
106 virtual TInt Initialise() = 0; |
112 virtual TInt Initialise() = 0; |
107 virtual void Sample() = 0; |
113 virtual void Sample(TAny* aPtr) = 0; |
108 virtual TBool PostSampleNeeded() = 0; |
114 virtual TBool PostSampleNeeded() = 0; |
109 virtual TInt PostSample() = 0; |
115 virtual TInt PostSample() = 0; |
110 virtual TInt EndSampling() = 0; |
116 virtual TInt EndSampling() = 0; |
111 |
117 |
112 virtual TInt Reset(DProfilerSampleStream* aStream = 0, TUint32 aSyncOffset = 0) = 0; |
118 virtual TInt Reset(DProfilerSampleStream* aStream = 0, TUint32 aSyncOffset = 0) = 0; |
113 |
119 |
114 virtual void SetEnabledFlag(TBool aFlag) = 0; |
120 virtual void SetEnabledFlag(TBool aFlag) = 0; |
115 virtual TBool GetEnabledFlag() = 0; |
121 virtual TBool GetEnabledFlag() = 0; |
116 virtual void SetOutputCombination(TInt aSettings) = 0; |
122 virtual void SetOutputCombination(TInt aSettings) = 0; |
117 virtual void SetSamplingPeriod(TInt aSettings) = 0; |
123 virtual void SetSamplingPeriod(TInt aSettings) = 0; |
118 virtual void SetAdditionalSettings(TInt aSettings) = 0; |
124 virtual void SetAdditionalSettings(TInt aSettings) = 0; |
119 virtual void SetAdditionalSettings2(TInt aSettings) = 0; |
125 virtual void SetAdditionalSettings2(TInt aSettings) = 0; |
120 virtual void SetAdditionalSettings3(TInt aSettings) = 0; |
126 virtual void SetAdditionalSettings3(TInt aSettings) = 0; |
121 virtual void SetAdditionalSettings4(TInt aSettings) = 0; |
127 virtual void SetAdditionalSettings4(TInt aSettings) = 0; |
122 |
128 |
123 TInt iSamplerId; |
129 TInt iSamplerId; |
124 TInt iOutputCombination; |
130 TInt iOutputCombination; |
125 TBool iEnabled; |
131 TBool iEnabled; |
126 }; |
132 }; |
127 |
133 |
128 /* |
134 /* |
129 * |
135 * |
130 * Template abstract class CProfilerGenericSampler definition |
136 * Template abstract class CProfilerGenericSampler definition |
131 * |
137 * |
132 */ |
138 */ |
133 |
139 |
134 // size parameter given defines the explicit buffer size in bytes for this sampler |
140 // size parameter given defines the explicit buffer size in bytes for this sampler |
135 template <int BufferSize> |
141 template <int BufferSize> |
136 class DProfilerGenericSampler : public DProfilerSamplerBase |
142 class DProfilerGenericSampler : public DProfilerSamplerBase |
137 { |
143 { |
138 public: |
144 public: |
139 DProfilerGenericSampler(TInt aSamplerId); |
145 DProfilerGenericSampler(TInt aSamplerId); |
140 virtual ~DProfilerGenericSampler(); |
146 virtual ~DProfilerGenericSampler(); |
141 |
147 |
142 TInt Initialise(); |
148 TInt Initialise(); |
143 virtual void Sample() = 0; |
149 virtual void Sample(TAny* aPtr) = 0; |
144 TBool PostSampleNeeded(); |
150 TBool PostSampleNeeded(); |
145 TInt PostSample(); |
151 TInt PostSample(); |
146 TInt EndSampling(); |
152 TInt EndSampling(); |
147 virtual TInt Reset(DProfilerSampleStream* aStream = 0, TUint32 aSyncOffset = 0); |
153 virtual TInt Reset(DProfilerSampleStream* aStream = 0, TUint32 aSyncOffset = 0); |
148 |
154 |
149 |
155 |
150 void SetEnabledFlag(TBool aFlag); |
156 void SetEnabledFlag(TBool aFlag); |
151 TBool GetEnabledFlag(); |
157 TBool GetEnabledFlag(); |
152 void SetOutputCombination(TInt aComb); |
158 void SetOutputCombination(TInt aComb); |
153 void SetSamplingPeriod(TInt aSettings); |
159 void SetSamplingPeriod(TInt aSettings); |
154 void SetAdditionalSettings(TInt aSettings); |
160 void SetAdditionalSettings(TInt aSettings); |
155 void SetAdditionalSettings2(TInt aSettings); |
161 void SetAdditionalSettings2(TInt aSettings); |
156 void SetAdditionalSettings3(TInt aSettings); |
162 void SetAdditionalSettings3(TInt aSettings); |
157 void SetAdditionalSettings4(TInt aSettings); |
163 void SetAdditionalSettings4(TInt aSettings); |
158 |
164 |
159 DProfilerSampleBuffer* iSampleBuffer; |
165 DProfilerSampleBuffer* iSampleBuffer; |
160 DProfilerSampleStream* iStream; |
166 DProfilerSampleStream* iStream; |
161 |
167 |
162 // for right alignment |
168 // for right alignment |
163 TUint8 iBuffer[BufferSize+4]; |
169 TUint8 iBuffer[BufferSize+4]; |
164 TUint8 iDblBuffer[BufferSize+4]; |
170 TUint8 iDblBuffer[BufferSize+4]; |
165 |
171 |
166 TInt iSamplingPeriod; |
172 TInt iSamplingPeriod; |
167 TInt iAdditionalSettings; |
173 TInt iAdditionalSettings; |
168 TInt iAdditionalSettings2; |
174 TInt iAdditionalSettings2; |
169 TInt iAdditionalSettings3; |
175 TInt iAdditionalSettings3; |
170 TInt iAdditionalSettings4; |
176 TInt iAdditionalSettings4; |
171 }; |
177 }; |
172 |
178 |
173 /* |
179 /* |
174 * |
180 * |
175 * Template abstract class CProfilerGenericSampler implementation |
181 * Template abstract class CProfilerGenericSampler implementation |
176 * |
182 * |
177 */ |
183 */ |
178 |
184 |
179 template <int BufferSize> |
185 template <int BufferSize> |
180 DProfilerGenericSampler<BufferSize>::DProfilerGenericSampler(TInt aSamplerId) |
186 DProfilerGenericSampler<BufferSize>::DProfilerGenericSampler(TInt aSamplerId) |
181 { |
187 { |
182 iSamplerId = aSamplerId; |
188 iSamplerId = aSamplerId; |
183 iEnabled = false; |
189 iEnabled = false; |
184 iSampleBuffer = 0; |
190 iSampleBuffer = 0; |
185 iAdditionalSettings = 0; |
191 iAdditionalSettings = 0; |
186 iAdditionalSettings2 = 0; |
192 iAdditionalSettings2 = 0; |
187 iAdditionalSettings3 = 0; |
193 iAdditionalSettings3 = 0; |
188 iAdditionalSettings4 = 0; |
194 iAdditionalSettings4 = 0; |
189 iStream = 0; |
195 iStream = 0; |
190 Initialise(); |
196 Initialise(); |
191 } |
197 } |
192 |
198 |
193 template <int BufferSize> |
199 template <int BufferSize> |
194 DProfilerGenericSampler<BufferSize>::~DProfilerGenericSampler() |
200 DProfilerGenericSampler<BufferSize>::~DProfilerGenericSampler() |
195 { |
201 { |
196 LOGSTRING2("CProfilerGenericSampler<%d>::CProfilerGenericSampler",BufferSize); |
202 LOGSTRING2("DProfilerGenericSampler<%d>::CProfilerGenericSampler",BufferSize); |
197 |
203 |
198 if(iSampleBuffer != 0) |
204 if(iSampleBuffer != 0) |
199 delete iSampleBuffer; |
205 { |
200 |
206 delete iSampleBuffer; |
|
207 } |
201 } |
208 } |
202 |
209 |
203 template <int BufferSize> |
210 template <int BufferSize> |
204 TInt DProfilerGenericSampler<BufferSize>::Initialise() |
211 TInt DProfilerGenericSampler<BufferSize>::Initialise() |
205 { |
212 { |
206 LOGSTRING2("CProfilerGenericSampler<%d>::Initialise - chunk option",BufferSize); |
213 LOGSTRING2("DProfilerGenericSampler<%d>::Initialise - chunk option",BufferSize); |
207 |
214 |
208 // stream is not used in chunk mode |
215 // stream is not used in chunk mode |
209 iStream = 0; |
216 iStream = 0; |
210 |
217 |
211 // create the sample buffer object with the buffers |
218 // create the sample buffer object with the buffers |
212 if(iSampleBuffer == 0) |
219 if(iSampleBuffer == 0) |
213 { |
220 { |
214 iSampleBuffer = new DProfilerSampleBuffer(iBuffer,iDblBuffer,BufferSize); |
221 iSampleBuffer = new DProfilerSampleBuffer(iBuffer,iDblBuffer,BufferSize); |
215 } |
222 } |
216 else |
223 else |
217 { |
224 { |
218 LOGSTRING2("CProfilerGenericSampler<%d>::Initialise - ERROR 1",BufferSize); |
225 LOGSTRING2("DProfilerGenericSampler<%d>::Initialise - ERROR 1",BufferSize); |
219 } |
226 } |
220 |
227 |
221 return KErrNone; |
228 return KErrNone; |
222 } |
229 } |
223 |
230 |
224 |
231 |
225 |
232 |
226 template <int BufferSize> |
233 template <int BufferSize> |
227 TInt DProfilerGenericSampler<BufferSize>::Reset(DProfilerSampleStream* aStream, TUint32 aSyncOffset) |
234 TInt DProfilerGenericSampler<BufferSize>::Reset(DProfilerSampleStream* aStream, TUint32 aSyncOffset) |
228 { |
235 { |
229 LOGSTRING4("CProfilerGenericSampler<%d>::Reset %d, sync offset %d",BufferSize,aStream,aSyncOffset); |
236 LOGSTRING4("DProfilerGenericSampler<%d>::Reset %d, sync offset %d",BufferSize,aStream,aSyncOffset); |
230 // reset the sample buffer and resolve the chunk again |
237 // reset the sample buffer and resolve the chunk again |
231 |
238 |
232 // CURRENT VERSION SUPPORTS ONLY STREAM MODE! |
239 // CURRENT VERSION SUPPORTS ONLY STREAM MODE! |
233 LOGSTRING2("CProfilerGenericSampler<%d>::Reset - stream option",BufferSize); |
240 LOGSTRING2("DProfilerGenericSampler<%d>::Reset - stream option",BufferSize); |
234 |
241 |
235 // initialise the sampler with the stream option |
242 // initialise the sampler with the stream option |
236 iStream = aStream; |
243 iStream = aStream; |
237 |
244 |
238 // clear the sample buffer |
245 // clear the sample buffer |
239 if(iSampleBuffer != 0) |
246 if(iSampleBuffer != 0) |
240 { |
247 { |
241 iSampleBuffer->ClearBuffer(); |
248 iSampleBuffer->ClearBuffer(); |
242 } |
249 } |
243 else |
250 else |
244 { |
251 { |
245 LOGSTRING2("CProfilerGenericSampler<%d>::Initialise - ERROR no buffer",BufferSize); |
252 LOGSTRING2("DProfilerGenericSampler<%d>::Initialise - ERROR no buffer",BufferSize); |
246 } |
253 } |
247 |
254 |
248 return KErrNone; |
255 return KErrNone; |
249 |
256 |
250 } |
257 } |
251 |
258 |
252 template <int BufferSize> |
259 template <int BufferSize> |
253 TBool DProfilerGenericSampler<BufferSize>::PostSampleNeeded() |
260 TBool DProfilerGenericSampler<BufferSize>::PostSampleNeeded() |
254 { |
261 { |
255 LOGSTRING4("CProfilerGenericSampler<%d>::PostSampleNeeded - ID %d, state %d",iSamplerId,BufferSize,iSampleBuffer->GetBufferStatus()); |
262 LOGSTRING4("DProfilerGenericSampler<%d>::PostSampleNeeded - ID %d, state %d",BufferSize ,iSamplerId ,iSampleBuffer->GetBufferStatus()); |
256 |
263 |
257 TUint32 status = iSampleBuffer->iBufferStatus; |
264 TUint32 status(iSampleBuffer->GetBufferStatus()); |
258 |
265 |
259 if(status == DProfilerSampleBuffer::BufferCopyAsap || status == DProfilerSampleBuffer::BufferFull) |
266 if(status == DProfilerSampleBuffer::BufferCopyAsap || status == DProfilerSampleBuffer::BufferFull) |
260 { |
267 { |
261 return true; |
268 return true; |
262 } |
269 } |
263 |
270 |
264 return false; |
271 return false; |
265 } |
272 } |
266 |
273 |
267 |
274 |
268 template <int BufferSize> |
275 template <int BufferSize> |
269 TInt DProfilerGenericSampler<BufferSize>::PostSample() |
276 TInt DProfilerGenericSampler<BufferSize>::PostSample() |
270 { |
277 { |
271 LOGSTRING4("CProfilerGenericSampler<%d>::PostSample - ID %d, state %d",iSamplerId,BufferSize,iSampleBuffer->GetBufferStatus()); |
278 LOGSTRING4("DProfilerGenericSampler<%d>::PostSample - ID %d, state %d",BufferSize,iSamplerId,iSampleBuffer->GetBufferStatus()); |
272 |
279 |
273 TUint32 status = iSampleBuffer->iBufferStatus; |
280 TUint32 status(iSampleBuffer->GetBufferStatus()); |
274 |
281 |
275 if(status == DProfilerSampleBuffer::BufferCopyAsap || status == DProfilerSampleBuffer::BufferFull) |
282 if(status == DProfilerSampleBuffer::BufferCopyAsap || status == DProfilerSampleBuffer::BufferFull) |
276 { |
283 { |
277 // write data to the stream |
284 // write data to the stream |
278 iStream->AddSamples(*iSampleBuffer,iSamplerId); |
285 iStream->AddSamples(*iSampleBuffer,iSamplerId); |
279 } |
286 } |
280 |
287 |
281 return KErrNone; |
288 return KErrNone; |
282 } |
289 } |
283 |
290 |
284 template <int BufferSize> |
291 template <int BufferSize> |
285 TInt DProfilerGenericSampler<BufferSize>::EndSampling() |
292 TInt DProfilerGenericSampler<BufferSize>::EndSampling() |
286 { |
293 { |
287 LOGSTRING3("CProfilerGenericSampler<%d>::EndSampling, ID %d",BufferSize,iSamplerId); |
294 LOGSTRING3("DProfilerGenericSampler<%d>::EndSampling, ID %d",BufferSize,iSamplerId); |
288 |
295 |
289 // only if write to stream option is selected |
296 // only if write to stream option is selected |
290 if(iStream->EndSampling(*iSampleBuffer,iSamplerId) == 0) |
297 if(iStream->EndSampling(*iSampleBuffer,iSamplerId) == 0) |
291 { |
298 { |
|
299 LOGSTRING3("DProfilerGenericSampler<%d>::EndSampling, ID %d - ok",BufferSize,iSamplerId); |
292 return KErrNone; |
300 return KErrNone; |
293 } |
301 } |
294 else |
302 else |
295 { |
303 { |
|
304 LOGSTRING3("DProfilerGenericSampler<%d>::EndSampling, ID %d - still data to copy",BufferSize,iSamplerId); |
296 // there is still data to copy |
305 // there is still data to copy |
297 return KErrNotReady; |
306 return KErrNotReady; |
298 } |
307 } |
299 } |
308 } |
300 |
309 |
301 template <int BufferSize> |
310 template <int BufferSize> |
302 void DProfilerGenericSampler<BufferSize>::SetEnabledFlag(TBool aFlag) |
311 void DProfilerGenericSampler<BufferSize>::SetEnabledFlag(TBool aFlag) |
303 { |
312 { |
304 LOGSTRING2("CProfilerGenericSampler<%d>::SetEnabledFlag",BufferSize); |
313 LOGSTRING2("CProfilerGenericSampler<%d>::SetEnabledFlag",BufferSize); |
305 iEnabled = aFlag; |
314 iEnabled = aFlag; |
306 } |
315 } |
307 |
316 |
308 template <int BufferSize> |
317 template <int BufferSize> |
309 TBool DProfilerGenericSampler<BufferSize>::GetEnabledFlag() |
318 TBool DProfilerGenericSampler<BufferSize>::GetEnabledFlag() |
310 { |
319 { |
311 LOGSTRING2("CProfilerGenericSampler<%d>::GetEnabledFlag",BufferSize); |
320 LOGSTRING2("CProfilerGenericSampler<%d>::GetEnabledFlag",BufferSize); |
312 return iEnabled; |
321 return iEnabled; |
313 } |
322 } |
314 |
323 |
315 template <int BufferSize> |
324 template <int BufferSize> |
316 void DProfilerGenericSampler<BufferSize>::SetOutputCombination(TInt aComb) |
325 void DProfilerGenericSampler<BufferSize>::SetOutputCombination(TInt aComb) |
317 { |
326 { |
318 LOGSTRING2("CProfilerGenericSampler<%d>::SetOutputCombination",BufferSize); |
327 LOGSTRING2("CProfilerGenericSampler<%d>::SetOutputCombination",BufferSize); |
319 iOutputCombination = aComb; |
328 iOutputCombination = aComb; |
320 } |
329 } |
321 |
330 |
322 template <int BufferSize> |
331 template <int BufferSize> |
323 void DProfilerGenericSampler<BufferSize>::SetAdditionalSettings(TInt aSettings) |
332 void DProfilerGenericSampler<BufferSize>::SetAdditionalSettings(TInt aSettings) |
324 { |
333 { |
325 LOGSTRING3("CProfilerGenericSampler<%d>::SetAdditionalSettings to 0x%x",BufferSize,aSettings); |
334 LOGSTRING3("CProfilerGenericSampler<%d>::SetAdditionalSettings to 0x%x",BufferSize,aSettings); |
326 iAdditionalSettings = aSettings; |
335 iAdditionalSettings = aSettings; |
327 } |
336 } |
328 |
337 |
329 template <int BufferSize> |
338 template <int BufferSize> |
330 void DProfilerGenericSampler<BufferSize>::SetAdditionalSettings2(TInt aSettings) |
339 void DProfilerGenericSampler<BufferSize>::SetAdditionalSettings2(TInt aSettings) |
331 { |
340 { |
332 LOGSTRING3("CProfilerGenericSampler<%d>::SetAdditionalSettings2 to 0x%x",BufferSize,aSettings); |
341 LOGSTRING3("CProfilerGenericSampler<%d>::SetAdditionalSettings2 to 0x%x",BufferSize,aSettings); |
333 iAdditionalSettings2 = aSettings; |
342 iAdditionalSettings2 = aSettings; |
334 } |
343 } |
335 |
344 |
336 template <int BufferSize> |
345 template <int BufferSize> |
337 void DProfilerGenericSampler<BufferSize>::SetAdditionalSettings3(TInt aSettings) |
346 void DProfilerGenericSampler<BufferSize>::SetAdditionalSettings3(TInt aSettings) |
338 { |
347 { |
339 LOGSTRING3("CProfilerGenericSampler<%d>::SetAdditionalSettings3 to 0x%x",BufferSize,aSettings); |
348 LOGSTRING3("CProfilerGenericSampler<%d>::SetAdditionalSettings3 to 0x%x",BufferSize,aSettings); |
340 iAdditionalSettings3 = aSettings; |
349 iAdditionalSettings3 = aSettings; |
341 } |
350 } |
342 |
351 |
343 template <int BufferSize> |
352 template <int BufferSize> |
344 void DProfilerGenericSampler<BufferSize>::SetAdditionalSettings4(TInt aSettings) |
353 void DProfilerGenericSampler<BufferSize>::SetAdditionalSettings4(TInt aSettings) |
345 { |
354 { |
346 LOGSTRING3("CProfilerGenericSampler<%d>::SetAdditionalSettings4 to 0x%x",BufferSize,aSettings); |
355 LOGSTRING3("CProfilerGenericSampler<%d>::SetAdditionalSettings4 to 0x%x",BufferSize,aSettings); |
347 iAdditionalSettings4 = aSettings; |
356 iAdditionalSettings4 = aSettings; |
348 } |
357 } |
349 |
358 |
350 template <int BufferSize> |
359 template <int BufferSize> |
351 void DProfilerGenericSampler<BufferSize>::SetSamplingPeriod(TInt aSettings) |
360 void DProfilerGenericSampler<BufferSize>::SetSamplingPeriod(TInt aSettings) |
352 { |
361 { |
353 LOGSTRING3("CProfilerGenericSampler<%d>::SetSamplingPeriod to 0x%x",BufferSize,aSettings); |
362 LOGSTRING3("CProfilerGenericSampler<%d>::SetSamplingPeriod to 0x%x",BufferSize,aSettings); |
354 iSamplingPeriod = aSettings; |
363 iSamplingPeriod = aSettings; |
355 } |
364 } |
356 |
365 |
357 /* |
366 /* |
358 * |
367 * |
359 * Just a test class that is derived from CProfilerGenericSampler |
368 * Just a test class that is derived from CProfilerGenericSampler |
360 * |
369 * |
361 */ |
370 */ |
362 |
371 |
363 template <int BufferSize> |
372 template <int BufferSize> |
364 class DProfilerExampleSampler : public DProfilerGenericSampler<BufferSize> |
373 class DProfilerExampleSampler : public DProfilerGenericSampler<BufferSize> |
365 { |
374 { |
366 public: |
375 public: |
367 TUint32 iSampleNumber; |
376 TUint32 iSampleNumber; |
368 |
377 |
369 DProfilerExampleSampler(TInt aSamplerId); |
378 DProfilerExampleSampler(TInt aSamplerId); |
370 ~DProfilerExampleSampler(); |
379 ~DProfilerExampleSampler(); |
371 |
380 |
372 void Sample(); |
381 void Sample(); |
373 void Sample(TInt aCount, TInt aLastPc); |
382 void Sample(TInt aCount, TInt aLastPc); |
374 }; |
383 }; |
375 |
384 |
376 |
385 |
377 /* |
386 /* |
378 * |
387 * |
379 * Just a test class that is derived from CProfilerGenericSampler |
388 * Just a test class that is derived from CProfilerGenericSampler |
380 * |
389 * |
381 */ |
390 */ |
382 |
391 |
383 template <int BufferSize> |
392 template <int BufferSize> |
384 DProfilerExampleSampler<BufferSize>::DProfilerExampleSampler(TInt aSamplerId) : |
393 DProfilerExampleSampler<BufferSize>::DProfilerExampleSampler(TInt aSamplerId) : |
385 DProfilerGenericSampler<BufferSize>(aSamplerId) |
394 DProfilerGenericSampler<BufferSize>(aSamplerId) |
386 { |
395 { |
387 iSampleNumber = 0; |
396 iSampleNumber = 0; |
388 LOGSTRING2("CProfilerExampleSampler<%d>::CProfilerExampleSampler",BufferSize); |
397 LOGSTRING2("CProfilerExampleSampler<%d>::CProfilerExampleSampler",BufferSize); |
389 } |
398 } |
390 |
399 |
391 template <int BufferSize> |
400 template <int BufferSize> |
392 void DProfilerExampleSampler<BufferSize>::Sample() |
401 void DProfilerExampleSampler<BufferSize>::Sample() |
393 { |
402 { |
394 LOGSTRING2("CProfilerExampleSampler<%d>::Sample",BufferSize); |
403 LOGSTRING2("CProfilerExampleSampler<%d>::Sample",BufferSize); |
395 TBuf8<20>* testiBuf = new TBuf8<20>; |
404 TBuf8<20>* testiBuf = new TBuf8<20>; |
396 |
405 |
397 testiBuf->AppendNum((TInt)iSampleNumber); |
406 testiBuf->AppendNum((TInt)iSampleNumber); |
398 iSampleNumber++; |
407 iSampleNumber++; |
399 |
408 |
400 this->iSampleBuffer->AddSample((TUint8*)testiBuf->Ptr(),testiBuf->Length()); |
409 this->iSampleBuffer->AddSample((TUint8*)testiBuf->Ptr(),testiBuf->Length()); |
401 delete testiBuf; |
410 delete testiBuf; |
402 return; |
411 return; |
403 } |
412 } |
404 |
413 |
405 template <int BufferSize> |
414 template <int BufferSize> |
406 void DProfilerExampleSampler<BufferSize>::Sample(TInt aCount, TInt aLastPc) |
415 void DProfilerExampleSampler<BufferSize>::Sample(TInt aCount, TInt aLastPc) |
407 { |
416 { |
408 return; |
417 return; |
409 } |
418 } |
410 |
419 |
411 template <int BufferSize> |
420 template <int BufferSize> |
412 DProfilerExampleSampler<BufferSize>::~DProfilerExampleSampler() |
421 DProfilerExampleSampler<BufferSize>::~DProfilerExampleSampler() |
413 { |
422 { |
414 LOGSTRING2("CProfilerExampleSampler<%d>::~CProfilerExampleSampler",BufferSize); |
423 LOGSTRING2("CProfilerExampleSampler<%d>::~CProfilerExampleSampler",BufferSize); |
415 } |
424 } |
416 |
425 |
417 #include <piprofiler/ProfilerGenericClassesKrn.inl> |
426 #include <piprofiler/ProfilerGenericClassesKrn.inl> |
418 |
427 |
419 #endif |
428 #endif |