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