102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectchar   netcpu_pstatnew_id[]="\
202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project@(#)netcpu_pstatnew.c (c) Copyright 2005, Hewlett-Packard Company, Version 2.4.1";
302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* since we "know" that this interface is available only on 11.23 and
502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   later, and that 11.23 and later are strictly 64-bit kernels, we can
602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   arbitrarily set _PSTAT64 here and not have to worry about it up in
702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   the configure script and makefiles. raj 2005/09/06 */
802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if HAVE_CONFIG_H
1002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project# include <config.h>
1102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
1202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
1302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <stdio.h>
1402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
1502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if HAVE_INTTYPES_H
1602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project# include <inttypes.h>
1702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else
1802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project# if HAVE_STDINT_H
1902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#  include <stdint.h>
2002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project# endif
2102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
2202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
2302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <unistd.h>
2402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
2502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#if HAVE_LIMITS_H
2602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project# include <limits.h>
2702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
2802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
2902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/dk.h>
3002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include <sys/pstat.h>
3102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
3202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* HP-UX 11.23 seems to have added three other cycle counters to the
3302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   original psp_idlecycles - one for user, one for kernel and one for
3402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   interrupt. so, we can now use those to calculate CPU utilization
3502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   without requiring any calibration phase.  raj 2005-02-16 */
3602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
3702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef PSTAT_IPCINFO
3802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project# error Sorry, pstat() CPU utilization on 10.0 and later only
3902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
4002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
4102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projecttypedef struct cpu_time_counters {
4202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  uint64_t idle;
4302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  uint64_t user;
4402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  uint64_t kernel;
4502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  uint64_t interrupt;
4602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project} cpu_time_counters_t;
4702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
4802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectuint64_t lib_iticksperclktick;
4902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
5002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "netsh.h"
5102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#include "netlib.h"
5202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
5302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* the lib_start_count and lib_end_count arrays hold the starting
5402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   and ending values of whatever is counting when the system is
5502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   idle. The rate at which this increments during a test is compared
5602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   with a previous calibrarion to arrive at a CPU utilization
5702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   percentage. raj 2005-01-26 */
5802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
5902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstatic cpu_time_counters_t  starting_cpu_counters[MAXCPUS];
6002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstatic cpu_time_counters_t  ending_cpu_counters[MAXCPUS];
6102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstatic cpu_time_counters_t  delta_cpu_counters[MAXCPUS];
6202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
6302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid
6402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcpu_util_init(void)
6502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
6602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  return;
6702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
6802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
6902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid
7002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcpu_util_terminate(void)
7102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
7202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  return;
7302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
7402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
7502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectint
7602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectget_cpu_method(void)
7702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
7802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  return HP_IDLE_COUNTER;
7902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
8002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
8102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid
8202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectget_cpu_counters(cpu_time_counters_t *res)
8302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
8402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      /* get the idle sycle counter for each processor. now while on a
8502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 64-bit kernel the ".psc_hi" and ".psc_lo" fields are 64 bits,
8602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 only the bottom 32-bits are actually valid.  don't ask me
8702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 why, that is just the way it is.  soo, we shift the psc_hi
8802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 value by 32 bits and then just sum-in the psc_lo value.  raj
8902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	 2005/09/06 */
9002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      struct pst_processor *psp;
9102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
9202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      psp = (struct pst_processor *)malloc(lib_num_loc_cpus * sizeof(*psp));
9302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (psp == NULL) {
9402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project        printf("malloc(%d) failed!\n", lib_num_loc_cpus * sizeof(*psp));
9502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project        exit(1);
9602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  }
9702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      if (pstat_getprocessor(psp, sizeof(*psp), lib_num_loc_cpus, 0) != -1) {
9802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project        int i;
9902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	/* we use lib_iticksperclktick in our sanity checking. we
10002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	   ass-u-me it is the same value for each CPU - famous last
10102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	   words no doubt. raj 2005/09/06 */
10202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	lib_iticksperclktick = psp[0].psp_iticksperclktick;
10302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project        for (i = 0; i < lib_num_loc_cpus; i++) {
10402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project          res[i].idle = (((uint64_t)psp[i].psp_idlecycles.psc_hi << 32) +
10502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project			 psp[i].psp_idlecycles.psc_lo);
10602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project          if(debug) {
10702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project            fprintf(where,
10802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project                    "\tidle[%d] = 0x%"PRIx64" ",
10902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project                    i,
11002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project                    res[i].idle);
11102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project            fflush(where);
11202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project          }
11302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project          res[i].user = (((uint64_t)psp[i].psp_usercycles.psc_hi << 32) +
11402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project			 psp[i].psp_usercycles.psc_lo);
11502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project          if(debug) {
11602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project            fprintf(where,
11702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project                    "user[%d] = 0x%"PRIx64" ",
11802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project                    i,
11902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project                    res[i].user);
12002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project            fflush(where);
12102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project          }
12202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project          res[i].kernel = (((uint64_t)psp[i].psp_systemcycles.psc_hi << 32) +
12302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project			    psp[i].psp_systemcycles.psc_lo);
12402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project          if(debug) {
12502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project            fprintf(where,
12602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project                    "kern[%d] = 0x%"PRIx64" ",
12702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project                    i,
12802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project                    res[i].kernel);
12902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project            fflush(where);
13002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project          }
13102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project          res[i].interrupt = (((uint64_t)psp[i].psp_interruptcycles.psc_hi << 32) +
13202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project			      psp[i].psp_interruptcycles.psc_lo);
13302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project          if(debug) {
13402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project            fprintf(where,
13502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project                    "intr[%d] = 0x%"PRIx64"\n",
13602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project                    i,
13702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project                    res[i].interrupt);
13802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project            fflush(where);
13902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project          }
14002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project        }
14102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project        free(psp);
14202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      }
14302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
14402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
14502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project/* calibrate_pstatnew
14602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   there really isn't anything much to do here since we have all the
14702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   counters and use their ratios for CPU util measurement. raj
14802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project   2005-02-16 */
14902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
15002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfloat
15102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcalibrate_idle_rate(int iterations, int interval)
15202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
15302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  return 0.0;
15402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
15502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
15602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectstatic void
15702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectprint_cpu_time_counters(char *name, int instance, cpu_time_counters_t *counters)
15802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
15902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  fprintf(where,"%s[%d]:\n",name,instance);
16002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  fprintf(where,
16102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  "\t idle %llu\n",counters[instance].idle);
16202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  fprintf(where,
16302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  "\t user %llu\n",counters[instance].user);
16402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  fprintf(where,
16502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  "\t kernel %llu\n",counters[instance].kernel);
16602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  fprintf(where,
16702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	  "\t interrupt %llu\n",counters[instance].interrupt);
16802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
16902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
17002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectfloat
17102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcalc_cpu_util_internal(float elapsed_time)
17202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
17302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  int i;
17402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
17502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  uint64_t total_cpu_cycles;
17602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  uint64_t sanity_cpu_cycles;
17702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
17802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef USE_INTEGER_MATH
17902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  double fraction_idle;
18002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  double fraction_user;
18102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  double fraction_kernel;
18202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  double fraction_interrupt;
18302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  double estimated_fraction_interrupt;
18402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else
18502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  uint64_t fraction_idle;
18602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  uint64_t fraction_user;
18702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  uint64_t fraction_kernel;
18802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  uint64_t fraction_interrupt;
18902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  uint64_t estimated_fraction_interrupt;
19002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
19102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define CALC_PERCENT 100
19202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define CALC_TENTH_PERCENT 1000
19302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define CALC_HUNDREDTH_PERCENT 10000
19402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define CALC_THOUSANDTH_PERCENT 100000
19502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#define CALC_ACCURACY CALC_THOUSANDTH_PERCENT
19602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
19702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif /* USE_INTEGER_MATH */
19802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  float actual_rate;
19902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  float correction_factor;
20002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
20102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  lib_local_cpu_util = (float)0.0;
20202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
20302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* It is possible that the library measured a time other than */
20402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* the one that the user want for the cpu utilization */
20502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* calculations - for example, tests that were ended by */
20602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* watchdog timers such as the udp stream test. We let these */
20702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* tests tell up what the elapsed time should be. */
20802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
20902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if (elapsed_time != 0.0) {
21002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    correction_factor = (float) 1.0 +
21102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      ((lib_elapsed - elapsed_time) / elapsed_time);
21202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
21302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  else {
21402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    correction_factor = (float) 1.0;
21502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
21602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
21702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* calculate our sanity check on cycles */
21802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if (debug) {
21902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    fprintf(where,
22002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	    "lib_elapsed %g _SC_CLK_TCK %d lib_iticksperclktick %"PRIu64"\n",
22102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	    lib_elapsed,
22202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	    sysconf(_SC_CLK_TCK),
22302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	    lib_iticksperclktick);
22402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
22502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
22602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* Ok, elsewhere I may have said that HP-UX 11.23 does the "right"
22702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     thing in measuring user, kernel, interrupt and idle all together
22802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     instead of overlapping interrupt with the others like an OS that
22902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     shall not be named.  However.... it seems there is a bug in the
23002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     accounting for interrupt cycles, whereby the cycles do not get
23102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     properly accounted.  The sum of user, kernel, interrupt and idle
23202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     does not equal the clock rate multiplied by the elapsed time.
23302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     Some cycles go missing.
23402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
23502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     Since we see agreement between netperf and glance/vsar with the
23602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     old "pstat" mechanism, we can presume that the accounting for
23702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     idle cycles is sufficiently accurate.  So, while we will still do
23802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     math with user, kernel and interrupt cycles, we will only
23902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     caculate CPU utilization based on the ratio of idle to _real_
24002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     total cycles.  I am told that a "future release" of HP-UX will
24102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project     fix the interupt cycle accounting.  raj 2005/09/14 */
24202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
24302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* calculate what the sum of CPU cycles _SHOULD_ be */
24402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  sanity_cpu_cycles = (uint64_t) ((double)lib_elapsed *
24502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    (double) sysconf(_SC_CLK_TCK) * (double)lib_iticksperclktick);
24602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
24702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* this looks just like the looper case. at least I think it */
24802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* should :) raj 4/95 */
24902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  for (i = 0; i < lib_num_loc_cpus; i++) {
25002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
25102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* we ass-u-me that these counters will never wrap during a
25202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       netperf run.  this may not be a particularly safe thing to
25302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       do. raj 2005-01-28 */
25402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    delta_cpu_counters[i].idle = ending_cpu_counters[i].idle -
25502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      starting_cpu_counters[i].idle;
25602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    delta_cpu_counters[i].user = ending_cpu_counters[i].user -
25702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      starting_cpu_counters[i].user;
25802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    delta_cpu_counters[i].kernel = ending_cpu_counters[i].kernel -
25902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      starting_cpu_counters[i].kernel;
26002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    delta_cpu_counters[i].interrupt = ending_cpu_counters[i].interrupt -
26102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      starting_cpu_counters[i].interrupt;
26202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
26302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    if (debug) {
26402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      print_cpu_time_counters("delta_cpu_counters",i,delta_cpu_counters);
26502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    }
26602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
26702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* now get the sum, which we ass-u-me does not overflow a 64-bit
26802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       counter. raj 2005-02-16 */
26902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    total_cpu_cycles =
27002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      delta_cpu_counters[i].idle +
27102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      delta_cpu_counters[i].user +
27202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      delta_cpu_counters[i].kernel +
27302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      delta_cpu_counters[i].interrupt;
27402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
27502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    if (debug) {
27602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      fprintf(where,
27702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	      "total_cpu_cycles %"PRIu64" sanity_cpu_cycles %"PRIu64" missing %"PRIu64"\n",
27802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	      total_cpu_cycles,
27902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	      sanity_cpu_cycles,
28002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	      sanity_cpu_cycles - total_cpu_cycles);
28102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    }
28202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
28302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* since HP-UX 11.23 does the _RIGHT_ thing and idle/user/kernel
28402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       does _NOT_ overlap with interrupt, we do not have to apply any
28502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       correction kludge. raj 2005-02-16 */
28602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
28702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#ifndef USE_INTEGER_MATH
28802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* when the accounting for interrupt time gets its act together,
28902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       we can use total_cpu_cycles rather than sanity_cpu_cycles, but
29002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       until then, use sanity_cpu_ccles. raj 2005/09/14 */
29102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
29202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    fraction_idle = (double)delta_cpu_counters[i].idle /
29302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      (double)sanity_cpu_cycles;
29402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
29502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    fraction_user = (double)delta_cpu_counters[i].user /
29602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      (double)sanity_cpu_cycles;
29702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
29802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    fraction_kernel = (double) delta_cpu_counters[i].kernel /
29902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      (double)sanity_cpu_cycles;
30002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
30102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    fraction_interrupt = (double)delta_cpu_counters[i].interrupt /
30202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      (double)sanity_cpu_cycles;
30302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
30402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* ass-u-me that it is only interrupt that is bogus, and assign
30502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       all the "missing" cycles to it. raj 2005/09/14 */
30602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    estimated_fraction_interrupt = ((double)delta_cpu_counters[i].interrupt +
30702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project				    (sanity_cpu_cycles - total_cpu_cycles)) /
30802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      (double)sanity_cpu_cycles;
30902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
31002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    if (debug) {
31102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      fprintf(where,"\tfraction_idle %g\n",fraction_idle);
31202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      fprintf(where,"\tfraction_user %g\n",fraction_user);
31302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      fprintf(where,"\tfraction_kernel %g\n",fraction_kernel);
31402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      fprintf(where,"\tfraction_interrupt %g WARNING, possibly under-counted!\n",fraction_interrupt);
31502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      fprintf(where,"\testimated_fraction_interrupt %g\n",
31602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	      estimated_fraction_interrupt);
31702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    }
31802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
31902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* and finally, what is our CPU utilization? */
32002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    lib_local_per_cpu_util[i] = 100.0 - (fraction_idle * 100.0);
32102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#else
32202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* and now some fun with integer math.  i initially tried to
32302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       promote things to long doubled but that didn't seem to result
32402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       in happiness and joy. raj 2005-01-28 */
32502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
32602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* multiply by 100 and divide by total and you get whole
32702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       percentages. multiply by 1000 and divide by total and you get
32802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       tenths of percentages.  multiply by 10000 and divide by total
32902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       and you get hundredths of percentages. etc etc etc raj
33002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       2005-01-28 */
33102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
33202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* when the accounting for interrupt time gets its act together,
33302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       we can use total_cpu_cycles rather than sanity_cpu_cycles, but
33402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       until then, use sanity_cpu_ccles. raj 2005/09/14 */
33502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
33602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    fraction_idle =
33702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      (delta_cpu_counters[i].idle * CALC_ACCURACY) / sanity_cpu_cycles;
33802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
33902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    fraction_user =
34002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      (delta_cpu_counters[i].user * CALC_ACCURACY) / sanity_cpu_cycles;
34102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
34202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    fraction_kernel =
34302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      (delta_cpu_counters[i].kernel * CALC_ACCURACY) / sanity_cpu_cycles;
34402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
34502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    fraction_interrupt =
34602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      (delta_cpu_counters[i].interrupt * CALC_ACCURACY) / sanity_cpu_cycles;
34702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
34802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
34902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    estimated_fraction_interrupt =
35002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      ((delta_cpu_counters[i].interrupt +
35102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	(sanity_cpu_cycles - total_cpu_cycles)) *
35202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project       CALC_ACCURACY) / sanity_cpu_cycles;
35302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
35402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    if (debug) {
35502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      fprintf(where,"\tfraction_idle %"PRIu64"\n",fraction_idle);
35602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      fprintf(where,"\tfraction_user %"PRIu64"\n",fraction_user);
35702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      fprintf(where,"\tfraction_kernel %"PRIu64"\n",fraction_kernel);
35802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      fprintf(where,"\tfraction_interrupt %"PRIu64"WARNING, possibly under-counted!\n",fraction_interrupt);
35902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      fprintf(where,"\testimated_fraction_interrupt %"PRIu64"\n",
36002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	      estimated_fraction_interrupt);
36102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    }
36202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
36302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    /* and finally, what is our CPU utilization? */
36402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    lib_local_per_cpu_util[i] = 100.0 - (((float)fraction_idle /
36502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project					  (float)CALC_ACCURACY) * 100.0);
36602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project#endif
36702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    if (debug) {
36802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project      fprintf(where,
36902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	      "lib_local_per_cpu_util[%d] %g\n",
37002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	      i,
37102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	      lib_local_per_cpu_util[i]);
37202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    }
37302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    lib_local_cpu_util += lib_local_per_cpu_util[i];
37402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
37502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  /* we want the average across all n processors */
37602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  lib_local_cpu_util /= (float)lib_num_loc_cpus;
37702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
37802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  lib_local_cpu_util *= correction_factor;
37902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
38002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  if (debug) {
38102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project    fprintf(where,
38202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project	    "calc_cpu_util: returning %g\n",lib_local_cpu_util);
38302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  }
38402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
38502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  return lib_local_cpu_util;
38602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
38702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
38802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid
38902fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcpu_start_internal(void)
39002fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
39102fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  get_cpu_counters(starting_cpu_counters);
39202fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
39302fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project
39402fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectvoid
39502fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Projectcpu_stop_internal(void)
39602fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project{
39702fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project  get_cpu_counters(ending_cpu_counters);
39802fb0aca1189a2c1fd20806c588e9ee80d9755f8The Android Open Source Project}
399