~ubuntu-branches/ubuntu/raring/virtualbox-ose/raring

« back to all changes in this revision

Viewing changes to src/VBox/Runtime/testcase/tstRTThreadExecutionTime.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Felix Geyer
  • Date: 2011-01-30 23:27:25 UTC
  • mfrom: (0.3.12 upstream)
  • Revision ID: james.westby@ubuntu.com-20110130232725-2ouajjd2ggdet0zd
Tags: 4.0.2-dfsg-1ubuntu1
* Merge from Debian unstable, remaining changes:
  - Add Apport hook.
    - debian/virtualbox-ose.files/source_virtualbox-ose.py
    - debian/virtualbox-ose.install
  - Drop *-source packages.
* Drop ubuntu-01-fix-build-gcc45.patch, fixed upstream.
* Drop ubuntu-02-as-needed.patch, added to the Debian package.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* $Id: tstRTThreadExecutionTime.cpp 34629 2010-12-02 17:09:09Z vboxsync $ */
 
2
/** @file
 
3
 * IPRT Testcase - RTThreadGetExecution.
 
4
 */
 
5
 
 
6
/*
 
7
 * Copyright (C) 2010 Oracle Corporation
 
8
 *
 
9
 * This file is part of VirtualBox Open Source Edition (OSE), as
 
10
 * available from http://www.virtualbox.org. This file is free software;
 
11
 * you can redistribute it and/or modify it under the terms of the GNU
 
12
 * General Public License (GPL) as published by the Free Software
 
13
 * Foundation, in version 2 as it comes in the "COPYING" file of the
 
14
 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 
15
 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 
16
 *
 
17
 * The contents of this file may alternatively be used under the terms
 
18
 * of the Common Development and Distribution License Version 1.0
 
19
 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
 
20
 * VirtualBox OSE distribution, in which case the provisions of the
 
21
 * CDDL are applicable instead of those of the GPL.
 
22
 *
 
23
 * You may elect to license modified versions of this file under the
 
24
 * terms and conditions of either the GPL or the CDDL or both.
 
25
 */
 
26
 
 
27
/*******************************************************************************
 
28
*   Header Files                                                               *
 
29
*******************************************************************************/
 
30
#include <iprt/thread.h>
 
31
 
 
32
#include <iprt/asm.h>
 
33
#include <iprt/test.h>
 
34
#include <iprt/string.h>
 
35
#include <iprt/stream.h>
 
36
#include <iprt/time.h>
 
37
 
 
38
 
 
39
/*******************************************************************************
 
40
*   Global Variables                                                           *
 
41
*******************************************************************************/
 
42
static RTTEST g_hTest;
 
43
static volatile uint64_t g_kernel, g_user;
 
44
 
 
45
 
 
46
static DECLCALLBACK(int) testThread(RTTHREAD hSelf, void *pvUser)
 
47
{
 
48
    uint64_t u64Now = RTTimeMilliTS();
 
49
    uint64_t kernel, kernelStart, user, userStart;
 
50
    RTThreadGetExecutionTimeMilli(&kernelStart, &userStart);
 
51
    while (RTTimeMilliTS() < u64Now + 1000)
 
52
        ;
 
53
    RTThreadGetExecutionTimeMilli(&kernel, &user);
 
54
    RTPrintf("kernel = %4lldms, user = %4lldms\n", kernel - kernelStart, user - userStart);
 
55
    ASMAtomicAddU64(&g_kernel, kernel);
 
56
    ASMAtomicAddU64(&g_user, user);
 
57
 
 
58
    return VINF_SUCCESS;
 
59
}
 
60
 
 
61
 
 
62
static void test1(void)
 
63
{
 
64
    RTTestSub(g_hTest, "Interrupt RTThreadSleep");
 
65
    RTTHREAD hThread[16];
 
66
    RTMSINTERVAL msWait = 1000;
 
67
    for (unsigned i = 0; i < RT_ELEMENTS(hThread); i++)
 
68
    {
 
69
        RTTESTI_CHECK_RC_RETV(RTThreadCreate(&hThread[i], testThread, NULL, 0, RTTHREADTYPE_DEFAULT,
 
70
                              RTTHREADFLAGS_WAITABLE, "test"), VINF_SUCCESS);
 
71
    }
 
72
    RTThreadSleep(500);
 
73
    RTPrintf("Waiting for %dms ...\n", msWait);
 
74
    RTThreadSleep(msWait);
 
75
    for (unsigned i = 0; i < RT_ELEMENTS(hThread); i++)
 
76
        RTTESTI_CHECK_RC(RTThreadWait(hThread[i], RT_INDEFINITE_WAIT, NULL), VINF_SUCCESS);
 
77
 
 
78
    RTPrintf("sum kernel = %lldms, sum user = %lldms\n", g_kernel, g_user);
 
79
}
 
80
 
 
81
 
 
82
int main()
 
83
{
 
84
    RTEXITCODE rcExit = RTTestInitAndCreate("tstRTThreadExecutionTime", &g_hTest);
 
85
    if (rcExit != RTEXITCODE_SUCCESS)
 
86
        return rcExit;
 
87
    test1();
 
88
 
 
89
    return RTTestSummaryAndDestroy(g_hTest);
 
90
}