Google format

This commit is contained in:
Ian Gulliver
2019-05-18 12:16:19 -07:00
parent a70d79e869
commit e03b7da056
4 changed files with 232 additions and 72 deletions

151
.clang-format Normal file
View File

@@ -0,0 +1,151 @@
---
Language: Cpp
# BasedOnStyle: Google
AccessModifierOffset: -1
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Left
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeColon
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 80
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: true
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: true
ForEachMacros:
- foreach
- Q_FOREACH
- BOOST_FOREACH
IncludeBlocks: Preserve
IncludeCategories:
- Regex: '^<ext/.*\.h>'
Priority: 2
- Regex: '^<.*\.h>'
Priority: 1
- Regex: '^<.*'
Priority: 2
- Regex: '.*'
Priority: 3
IncludeIsMainRegex: '([-_](test|unittest))?$'
IndentCaseLabels: true
IndentPPDirectives: None
IndentWidth: 2
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Never
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 1
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 200
PointerAlignment: Left
RawStringFormats:
- Language: Cpp
Delimiters:
- cc
- CC
- cpp
- Cpp
- CPP
- 'c++'
- 'C++'
CanonicalDelimiter: ''
BasedOnStyle: google
- Language: TextProto
Delimiters:
- pb
- PB
- proto
- PROTO
EnclosingFunctions:
- EqualsProto
- EquivToProto
- PARSE_PARTIAL_TEXT_PROTO
- PARSE_TEST_PROTO
- PARSE_TEXT_PROTO
- ParseTextOrDie
- ParseTextProtoOrDie
CanonicalDelimiter: ''
BasedOnStyle: google
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 2
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Auto
StatementMacros:
- Q_UNUSED
- QT_REQUIRE_VERSION
TabWidth: 8
UseTab: Never
...

View File

@@ -4,19 +4,19 @@
#include "usage.h"
int main(int argc, char *argv[]) {
google::InitGoogleLogging(argv[0]);
gflags::ParseCommandLineFlags(&argc, &argv, true);
google::InitGoogleLogging(argv[0]);
gflags::ParseCommandLineFlags(&argc, &argv, true);
fireusage::UsageTracker tracker;
tracker.Start();
for (int i = 0; i < 100000000; ++i) {
tracker.AddEvent();
for (int _ = 0; _ < 100000; ++_) {
}
}
tracker.Stop();
tracker.Log();
fireusage::UsageTracker tracker;
tracker.Start();
for (int i = 0; i < 100000000; ++i) {
tracker.AddEvent();
for (int _ = 0; _ < 100000; ++_) {
}
}
tracker.Stop();
tracker.Log();
gflags::ShutDownCommandLineFlags();
google::ShutdownGoogleLogging();
gflags::ShutDownCommandLineFlags();
google::ShutdownGoogleLogging();
}

View File

@@ -8,63 +8,72 @@ namespace fireusage {
namespace {
std::chrono::nanoseconds TvToNs(const timeval& tv) {
return std::chrono::seconds(tv.tv_sec) + std::chrono::microseconds(tv.tv_usec);
return std::chrono::seconds(tv.tv_sec) +
std::chrono::microseconds(tv.tv_usec);
}
} // namespace
} // namespace
void UsageTracker::AddEvents(uint64_t num) {
events_ += num;
}
void UsageTracker::AddEvents(uint64_t num) { events_ += num; }
void UsageTracker::AddEvent() {
events_ += 1;
}
void UsageTracker::AddEvent() { events_ += 1; }
void UsageTracker::Start() {
CHECK(!running_);
running_ = true;
CHECK(!running_);
running_ = true;
PCHECK(getrusage(RUSAGE_THREAD, &start_usage_) == 0);
start_time_ = std::chrono::steady_clock::now();
PCHECK(getrusage(RUSAGE_THREAD, &start_usage_) == 0);
start_time_ = std::chrono::steady_clock::now();
}
void UsageTracker::Stop() {
CHECK(running_);
running_ = false;
CHECK(running_);
running_ = false;
const auto end_time = std::chrono::steady_clock::now();
const auto end_time = std::chrono::steady_clock::now();
rusage end_usage;
PCHECK(getrusage(RUSAGE_THREAD, &end_usage) == 0);
rusage end_usage;
PCHECK(getrusage(RUSAGE_THREAD, &end_usage) == 0);
wall_time_ += end_time - start_time_;
user_time_ += TvToNs(end_usage.ru_utime) - TvToNs(start_usage_.ru_utime);
sys_time_ += TvToNs(end_usage.ru_stime) - TvToNs(start_usage_.ru_stime);
vol_ctxt_sw_ += end_usage.ru_nvcsw - start_usage_.ru_nvcsw;
invol_ctxt_sw_ += end_usage.ru_nivcsw - start_usage_.ru_nivcsw;
wall_time_ += end_time - start_time_;
user_time_ += TvToNs(end_usage.ru_utime) - TvToNs(start_usage_.ru_utime);
sys_time_ += TvToNs(end_usage.ru_stime) - TvToNs(start_usage_.ru_stime);
vol_ctxt_sw_ += end_usage.ru_nvcsw - start_usage_.ru_nvcsw;
invol_ctxt_sw_ += end_usage.ru_nivcsw - start_usage_.ru_nivcsw;
}
void UsageTracker::Log(const std::string_view& title) {
if (!title.empty()) {
// Need to do this here so --vmodule works properly
VLOG(1) << title << ":";
}
if (!title.empty()) {
// Need to do this here so --vmodule works properly
VLOG(1) << title << ":";
}
VLOG(1) << "\t events: " << std::setw(19) << std::setfill(' ') << events_;
VLOG(1) << "\t wall time: " << std::setw(19) << std::setfill(' ') << wall_time_.count() << "ns";
VLOG(1) << "\t user time: " << std::setw(19) << std::setfill(' ') << user_time_.count() << "ns (" << ((user_time_ * 100) / (user_time_ + sys_time_)) << "%)";
VLOG(1) << "\t sys time: " << std::setw(19) << std::setfill(' ') << sys_time_.count() << "ns (" << ((sys_time_ * 100) / (user_time_ + sys_time_)) << "%)";
VLOG(1) << "\t vol ctxt sw: " << std::setw(19) << std::setfill(' ') << vol_ctxt_sw_;
VLOG(1) << "\t invol ctxt sw: " << std::setw(19) << std::setfill(' ') << invol_ctxt_sw_;
if (events_) {
VLOG(1) << "\t wall time / event: " << std::setw(19) << std::setfill(' ') << (wall_time_ / events_).count() << "ns";
VLOG(1) << "\t user time / event: " << std::setw(19) << std::setfill(' ') << (user_time_ / events_).count() << "ns";
VLOG(1) << "\t sys time / event: " << std::setw(19) << std::setfill(' ') << (sys_time_ / events_).count() << "ns";
VLOG(1) << "\t vol ctxt sw / event: " << std::setw(19) << std::setfill(' ') << (vol_ctxt_sw_ / events_);
VLOG(1) << "\tinvol ctxt sw / event: " << std::setw(19) << std::setfill(' ') << (invol_ctxt_sw_ / events_);
}
VLOG(1) << "\t events: " << std::setw(19) << std::setfill(' ')
<< events_;
VLOG(1) << "\t wall time: " << std::setw(19) << std::setfill(' ')
<< wall_time_.count() << "ns";
VLOG(1) << "\t user time: " << std::setw(19) << std::setfill(' ')
<< user_time_.count() << "ns ("
<< ((user_time_ * 100) / (user_time_ + sys_time_)) << "%)";
VLOG(1) << "\t sys time: " << std::setw(19) << std::setfill(' ')
<< sys_time_.count() << "ns ("
<< ((sys_time_ * 100) / (user_time_ + sys_time_)) << "%)";
VLOG(1) << "\t vol ctxt sw: " << std::setw(19) << std::setfill(' ')
<< vol_ctxt_sw_;
VLOG(1) << "\t invol ctxt sw: " << std::setw(19) << std::setfill(' ')
<< invol_ctxt_sw_;
if (events_) {
VLOG(1) << "\t wall time / event: " << std::setw(19) << std::setfill(' ')
<< (wall_time_ / events_).count() << "ns";
VLOG(1) << "\t user time / event: " << std::setw(19) << std::setfill(' ')
<< (user_time_ / events_).count() << "ns";
VLOG(1) << "\t sys time / event: " << std::setw(19) << std::setfill(' ')
<< (sys_time_ / events_).count() << "ns";
VLOG(1) << "\t vol ctxt sw / event: " << std::setw(19) << std::setfill(' ')
<< (vol_ctxt_sw_ / events_);
VLOG(1) << "\tinvol ctxt sw / event: " << std::setw(19) << std::setfill(' ')
<< (invol_ctxt_sw_ / events_);
}
}
} // namespace fireusage
} // namespace fireusage

36
usage.h
View File

@@ -1,31 +1,31 @@
#pragma once
#include <sys/resource.h>
#include <chrono>
#include <string>
#include <sys/resource.h>
namespace fireusage {
class UsageTracker {
public:
void AddEvents(uint64_t num);
void AddEvent();
public:
void AddEvents(uint64_t num);
void AddEvent();
void Start();
void Stop();
void Log(const std::string_view& title="");
void Start();
void Stop();
void Log(const std::string_view& title = "");
private:
bool running_ = false;
uint64_t events_ = 0;
std::chrono::nanoseconds wall_time_;
std::chrono::nanoseconds user_time_;
std::chrono::nanoseconds sys_time_;
uint64_t vol_ctxt_sw_ = 0;
uint64_t invol_ctxt_sw_ = 0;
private:
bool running_ = false;
uint64_t events_ = 0;
std::chrono::nanoseconds wall_time_;
std::chrono::nanoseconds user_time_;
std::chrono::nanoseconds sys_time_;
uint64_t vol_ctxt_sw_ = 0;
uint64_t invol_ctxt_sw_ = 0;
std::chrono::steady_clock::time_point start_time_;
rusage start_usage_;
std::chrono::steady_clock::time_point start_time_;
rusage start_usage_;
};
} // namespace fireusage
} // namespace fireusage