270 iSignalTimeQue.Close(); |
270 iSignalTimeQue.Close(); |
271 } |
271 } |
272 |
272 |
273 void Sync::SemaphoreLatencyParent(TBMResult* aResult, TBMUInt64 aIter, TBool aRemote) |
273 void Sync::SemaphoreLatencyParent(TBMResult* aResult, TBMUInt64 aIter, TBool aRemote) |
274 { |
274 { |
|
275 RSemaphore slSync; |
|
276 TInt r = slSync.CreateGlobal(_L("slSync"), 0); |
|
277 BM_ERROR(r, r == KErrNone); |
|
278 |
275 SemaphoreLatencyArgs sl(aRemote, aIter); |
279 SemaphoreLatencyArgs sl(aRemote, aIter); |
276 MBMChild* child = sync.SpawnChild(&sl); |
280 MBMChild* child = sync.SpawnChild(&sl); |
277 for (TBMUInt64 i = 0; i < aIter; ++i) |
281 for (TBMUInt64 i = 0; i < aIter; ++i) |
278 { |
282 { |
|
283 slSync.Signal(); |
279 sl.iSem.Wait(); |
284 sl.iSem.Wait(); |
280 TBMTicks now; |
285 TBMTicks now; |
281 ::bmTimer.Stamp(&now); |
286 ::bmTimer.Stamp(&now); |
282 aResult->Cumulate(TBMTicksDelta(sl.SignalTime(), now)); |
287 aResult->Cumulate(TBMTicksDelta(sl.SignalTime(), now)); |
283 } |
288 } |
284 child->WaitChildExit(); |
289 child->WaitChildExit(); |
285 sl.Close(); |
290 sl.Close(); |
|
291 slSync.Close(); |
286 } |
292 } |
287 |
293 |
288 TInt Sync::SemaphoreLatencyChild(TAny* ptr) |
294 TInt Sync::SemaphoreLatencyChild(TAny* ptr) |
289 { |
295 { |
|
296 RSemaphore slSync; |
|
297 TInt r = slSync.OpenGlobal(_L("slSync")); |
|
298 BM_ERROR(r, r == KErrNone); |
|
299 |
290 SemaphoreLatencyArgs* sl = (SemaphoreLatencyArgs*) ptr; |
300 SemaphoreLatencyArgs* sl = (SemaphoreLatencyArgs*) ptr; |
291 sl->ChildOpen(); |
301 sl->ChildOpen(); |
292 for (TBMUInt64 i = 0; i < sl->iIterationCount; ++i) |
302 for (TBMUInt64 i = 0; i < sl->iIterationCount; ++i) |
293 { |
303 { |
|
304 slSync.Wait(); |
294 TBMTicks sigTime; |
305 TBMTicks sigTime; |
295 ::bmTimer.Stamp(&sigTime); |
306 ::bmTimer.Stamp(&sigTime); |
296 sl->iSem.Signal(); |
307 sl->iSem.Signal(); |
297 sl->ChildSignalTime(sigTime); |
308 sl->ChildSignalTime(sigTime); |
298 } |
309 } |
299 sl->ChildClose(); |
310 sl->ChildClose(); |
|
311 slSync.Close(); |
300 return KErrNone; |
312 return KErrNone; |
301 } |
313 } |
302 |
314 |
303 class ThreadSemaphoreLatencyArgs : public TBMSpawnArgs |
315 class ThreadSemaphoreLatencyArgs : public TBMSpawnArgs |
304 { |
316 { |
366 iSignalTimeQue.Close(); |
378 iSignalTimeQue.Close(); |
367 } |
379 } |
368 |
380 |
369 void Sync::ThreadSemaphoreLatencyParent(TBMResult* aResult, TBMUInt64 aIter, TBool aRemote) |
381 void Sync::ThreadSemaphoreLatencyParent(TBMResult* aResult, TBMUInt64 aIter, TBool aRemote) |
370 { |
382 { |
|
383 RSemaphore tslSync; |
|
384 TInt r = tslSync.CreateGlobal(_L("tslSync"), 0); |
|
385 BM_ERROR(r, r == KErrNone); |
|
386 |
371 ThreadSemaphoreLatencyArgs sl(aRemote, aIter); |
387 ThreadSemaphoreLatencyArgs sl(aRemote, aIter); |
372 MBMChild* child = sync.SpawnChild(&sl); |
388 MBMChild* child = sync.SpawnChild(&sl); |
373 for (TBMUInt64 i = 0; i < aIter; ++i) |
389 for (TBMUInt64 i = 0; i < aIter; ++i) |
374 { |
390 { |
375 sl.iStatus = KRequestPending; |
391 sl.iStatus = KRequestPending; |
|
392 tslSync.Signal(); |
376 User::WaitForRequest(sl.iStatus); |
393 User::WaitForRequest(sl.iStatus); |
377 BM_ASSERT(sl.iStatus == KErrNone); |
394 BM_ASSERT(sl.iStatus == KErrNone); |
378 TBMTicks now; |
395 TBMTicks now; |
379 ::bmTimer.Stamp(&now); |
396 ::bmTimer.Stamp(&now); |
380 aResult->Cumulate(TBMTicksDelta(sl.SignalTime(), now)); |
397 aResult->Cumulate(TBMTicksDelta(sl.SignalTime(), now)); |
381 } |
398 } |
382 child->WaitChildExit(); |
399 child->WaitChildExit(); |
383 sl.Close(); |
400 sl.Close(); |
|
401 tslSync.Close(); |
384 } |
402 } |
385 |
403 |
386 TInt Sync::ThreadSemaphoreLatencyChild(TAny* ptr) |
404 TInt Sync::ThreadSemaphoreLatencyChild(TAny* ptr) |
387 { |
405 { |
|
406 RSemaphore tslSync; |
|
407 TInt r = tslSync.OpenGlobal(_L("tslSync")); |
|
408 BM_ERROR(r, r == KErrNone); |
|
409 |
388 ThreadSemaphoreLatencyArgs* sl = (ThreadSemaphoreLatencyArgs*) ptr; |
410 ThreadSemaphoreLatencyArgs* sl = (ThreadSemaphoreLatencyArgs*) ptr; |
389 sl->ChildOpen(); |
411 sl->ChildOpen(); |
390 for (TBMUInt64 i = 0; i < sl->iIterationCount; ++i) |
412 for (TBMUInt64 i = 0; i < sl->iIterationCount; ++i) |
391 { |
413 { |
|
414 tslSync.Wait(); |
392 TRequestStatus* sptr = sl->iStatusPtr; |
415 TRequestStatus* sptr = sl->iStatusPtr; |
393 TBMTicks sigTime; |
416 TBMTicks sigTime; |
394 ::bmTimer.Stamp(&sigTime); |
417 ::bmTimer.Stamp(&sigTime); |
395 sl->iParent.RequestComplete(sptr, KErrNone); |
418 sl->iParent.RequestComplete(sptr, KErrNone); |
396 sl->ChildSignalTime(sigTime); |
419 sl->ChildSignalTime(sigTime); |
397 } |
420 } |
398 sl->ChildClose(); |
421 sl->ChildClose(); |
|
422 tslSync.Close(); |
399 return KErrNone; |
423 return KErrNone; |
400 } |
424 } |
401 |
425 |
402 |
426 |
403 TBMResult* Sync::Run(TBMUInt64 aIter, TInt* aCount) |
427 TBMResult* Sync::Run(TBMUInt64 aIter, TInt* aCount) |