Field3D
Log.cpp File Reference

Contains implementations of the logging-related functions. More...

#include <unistd.h>
#include <ios>
#include <fstream>
#include <iostream>
#include "Log.h"

Go to the source code of this file.

Namespaces

namespace  Msg
 Contains logging-related functions.
 

Functions

std::string bytesToString (int64_t bytes)
 Converts a byte count into a human-readable string.
 
size_t currentRSS ()
 Returns the current resident memory size.
 
FIELD3D_API void Msg::print (Severity severity, const std::string &message)
 Sends the string to the assigned output, prefixing the message with the severity.
 
FIELD3D_API void Msg::setVerbosity (int level=1)
 Set the verbosity level of console output: 0 = do not echo anything to the console; >=1 = echo all messages and warnings to the console.
 

Variables

static int Msg::g_verbosity = 1
 

Detailed Description

Contains implementations of the logging-related functions.

Definition in file Log.cpp.

Function Documentation

◆ bytesToString()

std::string bytesToString ( int64_t bytes)

Converts a byte count into a human-readable string.

Definition at line 101 of file Log.cpp.

102{
103 using std::stringstream;
104
105 stringstream ss;
106 ss.precision(3);
107 ss.setf(std::ios::fixed, std:: ios::floatfield);
108
109 // Make it work for negative numbers
110 if (bytes < 0) {
111 ss << "-";
112 bytes = -bytes;
113 }
114
115 if (bytes < 1024) {
116 // Bytes
117 ss << bytes << " B";
118 return ss.str();
119 } else if (bytes < (1024 * 1024)) {
120 // Kilobytes
121 ss << bytes / static_cast<float>(1024) << " KB";
122 return ss.str();
123 } else if (bytes < (1024 * 1024 * 1024)) {
124 // Megabytes
125 ss << bytes / static_cast<float>(1024 * 1024) << " MB";
126 return ss.str();
127 } else {
128 // Gigabytes
129 ss << bytes / static_cast<float>(1024 * 1024 * 1024) << " GB";
130 return ss.str();
131 }
132}

◆ currentRSS()

size_t currentRSS ( )

Returns the current resident memory size.

Warning
Currently only supported on Linux platform. Returns 0 for others.

Only implemented for Linux at the moment.

Definition at line 136 of file Log.cpp.

137{
139
140#ifdef __linux__
141
142 using std::ios_base;
143 using std::ifstream;
144 using std::string;
145 ifstream stat_stream("/proc/self/stat", ios_base::in);
146
147 string pid, comm, state, ppid, pgrp, session, tty_nr;
148 string tpgid, flags, minflt, cminflt, majflt, cmajflt;
149 string utime, stime, cutime, cstime, priority, nice;
150 string O, itrealvalue, starttime;
151
152 unsigned long vsize;
153 long rss;
154
155 stat_stream >> pid >> comm >> state >> ppid >> pgrp >> session >> tty_nr
156 >> tpgid >> flags >> minflt >> cminflt >> majflt >> cmajflt
157 >> utime >> stime >> cutime >> cstime >> priority >> nice
158 >> O >> itrealvalue >> starttime
159 >> vsize >> rss; // don't care about the rest
160
161 stat_stream.close();
162
163 // in case x86-64 is configured to use 2MB pages
164 long page_size = sysconf(_SC_PAGE_SIZE);
165
166 // vm_usage = vsize / 1024.0;
167 // resident_set = rss * page_size;
168
169 return rss * page_size;
170
171#else
172
173 return 0;
174
175#endif
176
177}