Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

148 lines
3.3 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkProcessStatistics.cxx,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include "vtkProcessStatistics.h"
vtkCxxRevisionMacro(vtkProcessStatistics, "$Revision: 1.13 $");
#ifndef _WIN32
#include <sys/procfs.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include "vtkObjectFactory.h"
vtkStandardNewMacro(vtkProcessStatistics);
/* This mess was copied from the GNU getpagesize.h. */
#ifndef HAVE_GETPAGESIZE
# ifdef HAVE_UNISTD_H
# include <unistd.h>
# endif
/* Assume that all systems that can run configure have sys/param.h. */
# ifndef HAVE_SYS_PARAM_H
# define HAVE_SYS_PARAM_H 1
# endif
# ifdef _SC_PAGESIZE
# define getpagesize() sysconf(_SC_PAGESIZE)
# else /* no _SC_PAGESIZE */
# ifdef HAVE_SYS_PARAM_H
# include <sys/param.h>
# ifdef EXEC_PAGESIZE
# define getpagesize() EXEC_PAGESIZE
# else /* no EXEC_PAGESIZE */
# ifdef NBPG
# define getpagesize() NBPG * CLSIZE
# ifndef CLSIZE
# define CLSIZE 1
# endif /* no CLSIZE */
# else /* no NBPG */
# ifdef NBPC
# define getpagesize() NBPC
# else /* no NBPC */
# ifdef PAGESIZE
# define getpagesize() PAGESIZE
# endif /* PAGESIZE */
# endif /* no NBPC */
# endif /* no NBPG */
# endif /* no EXEC_PAGESIZE */
# else /* no HAVE_SYS_PARAM_H */
# define getpagesize() 8192 /* punt totally */
# endif /* no HAVE_SYS_PARAM_H */
# endif /* no _SC_PAGESIZE */
#endif /* no HAVE_GETPAGESIZE */
#endif _WIN32
// Construct the ProcessStatistics with eight points.
vtkProcessStatistics::vtkProcessStatistics()
{
}
int vtkProcessStatistics::GetProcessSizeInBytes()
{
#ifndef _WIN32
prpsinfo psinfo;
int fd;
char pname[1024];
int pagesize;
pid_t pid;
// Get out process id
pid = getpid();
// Get the size of a page in bytes
pagesize = getpagesize();
// Open the /proc/<pid> file and query the
// process info
sprintf( pname, "/proc/%d", pid );
fd = open( pname, O_RDONLY );
if (fd != -1)
{
psinfo.pr_size = 0;
ioctl( fd, PIOCPSINFO, &psinfo );
close( fd );
}
else
{
vtkErrorMacro(<< "Cannot get size of " << pname);
return 0;
}
// The size in bytes is the page size of the process times
// the size of a page in bytes
return psinfo.pr_size * pagesize;
#endif
#ifdef _WIN32
return 0;
#endif
}
double vtkProcessStatistics::GetProcessCPUTimeInMilliseconds()
{
#ifndef _WIN32
prpsinfo psinfo;
int fd;
char pname[1024];
pid_t pid;
// Get out process id
pid = getpid();
// Open the /proc/<pid> file and query the
// process info
sprintf( pname, "/proc/%d", pid );
fd = open( pname, O_RDONLY );
ioctl( fd, PIOCPSINFO, &psinfo );
close( fd );
return
(double) psinfo.pr_time.tv_sec * 1000.0 +
(double) psinfo.pr_time.tv_nsec / 1000000.0;
#endif
#ifdef _WIN32
return 0.0;
#endif
}