1f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten/*
2f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten * Copyright (C) 2011 The Android Open Source Project
3f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten *
4f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License");
5f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten * you may not use this file except in compliance with the License.
6f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten * You may obtain a copy of the License at
7f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten *
8f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten *      http://www.apache.org/licenses/LICENSE-2.0
9f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten *
10f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten * Unless required by applicable law or agreed to in writing, software
11f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS,
12f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten * See the License for the specific language governing permissions and
14f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten * limitations under the License.
15f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten */
16f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten
17f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten// Minimal test program for clock
18f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten
19f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten#include <pthread.h>
20f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten#include <stdio.h>
21f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten#include <stdlib.h>
22f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten#include <time.h>
23f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten#include <unistd.h>
24f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten
25f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten// this thread soaks the CPU so that clock() function will advance
26f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kastenvoid *cpu_hog(void *arg)
27f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten{
28f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    for (;;) {
29f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten        // the system call should not be optimized away by the compiler
30f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten        (void) getpid();
31f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    }
32f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten}
33f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten
34f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kastenint main(int argc, char **argv)
35f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten{
36f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    pthread_t thread;
37f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    clock_t ticks10, ticks15;
38f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten
39f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    // do not call clock() here so we can test initialization
40f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten
41f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    // soak the CPU for 10 seconds, then read clock
42f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    pthread_create(&thread, NULL, cpu_hog, NULL);
43f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    sleep(10);
44f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    ticks10 = clock();
45f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten
46f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    // soak the CPU for 5 more seconds, then read clock
47f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    sleep(5);
48f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    ticks15 = clock();
49f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten
50f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    // print the results
51f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    printf("CLOCKS_PER_SEC = %ld ticks/sec\n", (clock_t) CLOCKS_PER_SEC);
52f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    printf("At 10 secs clock=%lu, at 15 secs clock=%lu\n", ticks10, ticks15);
53f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten
54f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    // exit could wait for the other thread to complete
55f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten    _exit(EXIT_SUCCESS);
56f06bff7831256c708e9e5f06837bef3afc000e87Glenn Kasten}
57