SBufExceptions.h \
SBufList.cc \
SBufList.h \
- SBufStream.h
+ SBufStream.h \
+ Stats.cc \
+ Stats.h
const SBuf::size_type SBuf::npos;
const SBuf::size_type SBuf::maxSize;
-SBufStats::SBufStats()
- : alloc(0), allocCopy(0), allocFromCString(0),
- assignFast(0), clear(0), append(0), moves(0), toStream(0), setChar(0),
- getChar(0), compareSlow(0), compareFast(0), copyOut(0),
- rawAccess(0), nulTerminate(0), chop(0), trim(0), find(0), scanf(0),
- caseChange(0), cowFast(0), cowSlow(0), live(0)
-{}
-
-SBufStats&
-SBufStats::operator +=(const SBufStats& ss)
-{
- alloc += ss.alloc;
- allocCopy += ss.allocCopy;
- allocFromCString += ss.allocFromCString;
- assignFast += ss.assignFast;
- clear += ss.clear;
- append += ss.append;
- moves += ss.moves;
- toStream += ss.toStream;
- setChar += ss.setChar;
- getChar += ss.getChar;
- compareSlow += ss.compareSlow;
- compareFast += ss.compareFast;
- copyOut += ss.copyOut;
- rawAccess += ss.rawAccess;
- nulTerminate += ss.nulTerminate;
- chop += ss.chop;
- trim += ss.trim;
- find += ss.find;
- scanf += ss.scanf;
- caseChange += ss.caseChange;
- cowFast += ss.cowFast;
- cowSlow += ss.cowSlow;
- live += ss.live;
-
- return *this;
-}
-
SBuf::SBuf()
: store_(GetStorePrototype()), off_(0), len_(0)
{
return rv;
}
-std::ostream &
-SBufStats::dump(std::ostream& os) const
-{
- MemBlobStats ststats = MemBlob::GetStats();
- os <<
- "SBuf stats:\nnumber of allocations: " << alloc <<
- "\ncopy-allocations: " << allocCopy <<
- "\ncopy-allocations from C String: " << allocFromCString <<
- "\nlive references: " << live <<
- "\nno-copy assignments: " << assignFast <<
- "\nclearing operations: " << clear <<
- "\nappend operations: " << append <<
- "\nmove operations: " << moves <<
- "\ndump-to-ostream: " << toStream <<
- "\nset-char: " << setChar <<
- "\nget-char: " << getChar <<
- "\ncomparisons with data-scan: " << compareSlow <<
- "\ncomparisons not requiring data-scan: " << compareFast <<
- "\ncopy-out ops: " << copyOut <<
- "\nraw access to memory: " << rawAccess <<
- "\nNULL terminate C string: " << nulTerminate <<
- "\nchop operations: " << chop <<
- "\ntrim operations: " << trim <<
- "\nfind: " << find <<
- "\nscanf: " << scanf <<
- "\ncase-change ops: " << caseChange <<
- "\nCOW not actually requiring a copy: " << cowFast <<
- "\nCOW: " << cowSlow <<
- "\naverage store share factor: " <<
- (ststats.live != 0 ? static_cast<float>(live)/ststats.live : 0) <<
- std::endl;
- return os;
-}
-
void
SBuf::toLower()
{
#include "globals.h"
#include "sbuf/MemBlob.h"
#include "SBufExceptions.h"
+#include "sbuf/Stats.h"
#include <climits>
#include <cstdarg>
caseInsensitive
} SBufCaseSensitive;
-/**
- * Container for various SBuf class-wide statistics.
- *
- * The stats are not completely accurate; they're mostly meant to
- * understand whether Squid is leaking resources
- * and whether SBuf is paying off the expected gains.
- */
-class SBufStats
-{
-public:
- uint64_t alloc; ///<number of calls to SBuf constructors
- uint64_t allocCopy; ///<number of calls to SBuf copy-constructor
- uint64_t allocFromCString; ///<number of copy-allocations from c-strings
- uint64_t assignFast; ///<number of no-copy assignment operations
- uint64_t clear; ///<number of clear operations
- uint64_t append; ///<number of append operations
- uint64_t moves; ///<number of move constructions/assignments
- uint64_t toStream; ///<number of write operations to ostreams
- uint64_t setChar; ///<number of calls to setAt
- uint64_t getChar; ///<number of calls to at() and operator[]
- uint64_t compareSlow; ///<number of comparison operations requiring data scan
- uint64_t compareFast; ///<number of comparison operations not requiring data scan
- uint64_t copyOut; ///<number of data-copies to other forms of buffers
- uint64_t rawAccess; ///<number of accesses to raw contents
- uint64_t nulTerminate; ///<number of c_str() terminations
- uint64_t chop; ///<number of chop operations
- uint64_t trim; ///<number of trim operations
- uint64_t find; ///<number of find operations
- uint64_t scanf; ///<number of scanf operations
- uint64_t caseChange; ///<number of toUpper and toLower operations
- uint64_t cowFast; ///<number of cow operations not actually requiring a copy
- uint64_t cowSlow; ///<number of cow operations requiring a copy
- uint64_t live; ///<number of currently-allocated SBuf
-
- ///Dump statistics to an ostream.
- std::ostream& dump(std::ostream &os) const;
- SBufStats();
-
- SBufStats& operator +=(const SBufStats&);
-};
-
class CharacterSet;
class SBuf;
--- /dev/null
+/*
+ * Copyright (C) 1996-2016 The Squid Software Foundation and contributors
+ *
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
+ */
+
+#include "squid.h"
+#include "sbuf/MemBlob.h"
+#include "sbuf/SBuf.h"
+#include "sbuf/Stats.h"
+
+#include <iostream>
+
+SBufStats::SBufStats()
+ : alloc(0), allocCopy(0), allocFromCString(0),
+ assignFast(0), clear(0), append(0), moves(0), toStream(0), setChar(0),
+ getChar(0), compareSlow(0), compareFast(0), copyOut(0),
+ rawAccess(0), nulTerminate(0), chop(0), trim(0), find(0), scanf(0),
+ caseChange(0), cowFast(0), cowSlow(0), live(0)
+{}
+
+SBufStats&
+SBufStats::operator +=(const SBufStats& ss)
+{
+ alloc += ss.alloc;
+ allocCopy += ss.allocCopy;
+ allocFromCString += ss.allocFromCString;
+ assignFast += ss.assignFast;
+ clear += ss.clear;
+ append += ss.append;
+ moves += ss.moves;
+ toStream += ss.toStream;
+ setChar += ss.setChar;
+ getChar += ss.getChar;
+ compareSlow += ss.compareSlow;
+ compareFast += ss.compareFast;
+ copyOut += ss.copyOut;
+ rawAccess += ss.rawAccess;
+ nulTerminate += ss.nulTerminate;
+ chop += ss.chop;
+ trim += ss.trim;
+ find += ss.find;
+ scanf += ss.scanf;
+ caseChange += ss.caseChange;
+ cowFast += ss.cowFast;
+ cowSlow += ss.cowSlow;
+ live += ss.live;
+
+ return *this;
+}
+
+std::ostream &
+SBufStats::dump(std::ostream& os) const
+{
+ MemBlobStats ststats = MemBlob::GetStats();
+ os <<
+ "SBuf stats:\nnumber of allocations: " << alloc <<
+ "\ncopy-allocations: " << allocCopy <<
+ "\ncopy-allocations from C String: " << allocFromCString <<
+ "\nlive references: " << live <<
+ "\nno-copy assignments: " << assignFast <<
+ "\nclearing operations: " << clear <<
+ "\nappend operations: " << append <<
+ "\nmove operations: " << moves <<
+ "\ndump-to-ostream: " << toStream <<
+ "\nset-char: " << setChar <<
+ "\nget-char: " << getChar <<
+ "\ncomparisons with data-scan: " << compareSlow <<
+ "\ncomparisons not requiring data-scan: " << compareFast <<
+ "\ncopy-out ops: " << copyOut <<
+ "\nraw access to memory: " << rawAccess <<
+ "\nNULL terminate C string: " << nulTerminate <<
+ "\nchop operations: " << chop <<
+ "\ntrim operations: " << trim <<
+ "\nfind: " << find <<
+ "\nscanf: " << scanf <<
+ "\ncase-change ops: " << caseChange <<
+ "\nCOW not actually requiring a copy: " << cowFast <<
+ "\nCOW: " << cowSlow <<
+ "\naverage store share factor: " <<
+ (ststats.live != 0 ? static_cast<float>(live)/ststats.live : 0) <<
+ std::endl;
+ return os;
+}
+
--- /dev/null
+/*
+ * Copyright (C) 1996-2016 The Squid Software Foundation and contributors
+ *
+ * Squid software is distributed under GPLv2+ license and includes
+ * contributions from numerous individuals and organizations.
+ * Please see the COPYING and CONTRIBUTORS files for details.
+ */
+
+#ifndef SQUID_SBUF_STATS_H
+#define SQUID_SBUF_STATS_H
+
+#include <iosfwd>
+
+/**
+ * Container for various SBuf class-wide statistics.
+ *
+ * The stats are not completely accurate; they're mostly meant to
+ * understand whether Squid is leaking resources
+ * and whether SBuf is paying off the expected gains.
+ */
+class SBufStats
+{
+public:
+ uint64_t alloc; ///<number of calls to SBuf constructors
+ uint64_t allocCopy; ///<number of calls to SBuf copy-constructor
+ uint64_t allocFromCString; ///<number of copy-allocations from c-strings
+ uint64_t assignFast; ///<number of no-copy assignment operations
+ uint64_t clear; ///<number of clear operations
+ uint64_t append; ///<number of append operations
+ uint64_t moves; ///<number of move constructions/assignments
+ uint64_t toStream; ///<number of write operations to ostreams
+ uint64_t setChar; ///<number of calls to setAt
+ uint64_t getChar; ///<number of calls to at() and operator[]
+ uint64_t compareSlow; ///<number of comparison operations requiring data scan
+ uint64_t compareFast; ///<number of comparison operations not requiring data scan
+ uint64_t copyOut; ///<number of data-copies to other forms of buffers
+ uint64_t rawAccess; ///<number of accesses to raw contents
+ uint64_t nulTerminate; ///<number of c_str() terminations
+ uint64_t chop; ///<number of chop operations
+ uint64_t trim; ///<number of trim operations
+ uint64_t find; ///<number of find operations
+ uint64_t scanf; ///<number of scanf operations
+ uint64_t caseChange; ///<number of toUpper and toLower operations
+ uint64_t cowFast; ///<number of cow operations not actually requiring a copy
+ uint64_t cowSlow; ///<number of cow operations requiring a copy
+ uint64_t live; ///<number of currently-allocated SBuf
+
+ ///Dump statistics to an ostream.
+ std::ostream& dump(std::ostream &os) const;
+ SBufStats();
+
+ SBufStats& operator +=(const SBufStats&);
+};
+
+#endif /* SQUID_SBUF_STATS_H */