Skip to content
Snippets Groups Projects
MemWatch.cpp 1.33 KiB
Newer Older
Lars Bilke's avatar
Lars Bilke committed
/**
Lars Bilke's avatar
Lars Bilke committed
 * \file
 * \author Thomas Fischer
 * \date   2012-05-07
 * \brief  Implementation of the MemWatch class.
 *
 * \copyright
 * Copyright (c) 2012-2021, OpenGeoSys Community (http://www.opengeosys.org)
Lars Bilke's avatar
Lars Bilke committed
 *            Distributed under a Modified BSD License.
 *              See accompanying file LICENSE.txt or
Lars Bilke's avatar
Lars Bilke committed
 *              http://www.opengeosys.org/project/license
Lars Bilke's avatar
Lars Bilke committed
 *
Tom Fischer's avatar
Tom Fischer committed
 */

#include "MemWatch.h"

Karsten Rink's avatar
Karsten Rink committed
#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__MINGW32__)
Tom Fischer's avatar
Tom Fischer committed

Dmitri Naumov's avatar
Dmitri Naumov committed
#include <fstream>
#include <sstream>
#include <string>
#endif
Tom Fischer's avatar
Tom Fischer committed

Dmitri Naumov's avatar
Dmitri Naumov committed
namespace BaseLib
Tom Fischer's avatar
Tom Fischer committed
{
Dmitri Naumov's avatar
Dmitri Naumov committed
MemWatch::MemWatch()
{
    updateMemUsage();
Dmitri Naumov's avatar
Dmitri Naumov committed
unsigned MemWatch::updateMemUsage()
Tom Fischer's avatar
Tom Fischer committed
{
Karsten Rink's avatar
Karsten Rink committed
#if !defined(_WIN32) && !defined(__APPLE__) && !defined(__MINGW32__)
Dmitri Naumov's avatar
Dmitri Naumov committed
    std::string fname("/proc/");
    std::stringstream str_pid;
    str_pid << static_cast<unsigned>(getpid());
    fname += str_pid.str();
    fname += "/statm";
    unsigned pages;
Tom Fischer's avatar
Tom Fischer committed

Dmitri Naumov's avatar
Dmitri Naumov committed
    std::ifstream in(fname.c_str(), std::ios::in);
    if (!in.is_open())
    {
        perror("open");
        return 1;
    }
Tom Fischer's avatar
Tom Fischer committed

Dmitri Naumov's avatar
Dmitri Naumov committed
    in >> pages;
    vmem_size_ = static_cast<unsigned long>(pages) *
                 static_cast<unsigned long>(getpagesize());
    in.close();
Dmitri Naumov's avatar
Dmitri Naumov committed
    return 0;
Dmitri Naumov's avatar
Dmitri Naumov committed
unsigned long MemWatch::getVirtMemUsage()
Tom Fischer's avatar
Tom Fischer committed
{
Dmitri Naumov's avatar
Dmitri Naumov committed
    updateMemUsage();
    return vmem_size_;
Dmitri Naumov's avatar
Dmitri Naumov committed
}  // end namespace BaseLib