diff options
Diffstat (limited to 'runtime/base')
-rw-r--r-- | runtime/base/logging.h | 22 | ||||
-rw-r--r-- | runtime/base/mutex.cc | 4 | ||||
-rw-r--r-- | runtime/base/mutex.h | 5 | ||||
-rw-r--r-- | runtime/base/timing_logger.cc | 38 | ||||
-rw-r--r-- | runtime/base/timing_logger.h | 13 |
5 files changed, 42 insertions, 40 deletions
diff --git a/runtime/base/logging.h b/runtime/base/logging.h index 0fcec1f..fcec733 100644 --- a/runtime/base/logging.h +++ b/runtime/base/logging.h @@ -235,6 +235,28 @@ std::ostream& operator<<(std::ostream& os, const Dumpable<T>& rhs) { return os; } +template<typename T> +class ConstDumpable { + public: + explicit ConstDumpable(const T& value) : value_(value) { + } + + void Dump(std::ostream& os) const { + value_.Dump(os); + } + + private: + const T& value_; + + DISALLOW_COPY_AND_ASSIGN(ConstDumpable); +}; + +template<typename T> +std::ostream& operator<<(std::ostream& os, const ConstDumpable<T>& rhs) { + rhs.Dump(os); + return os; +} + // Helps you use operator<< in a const char*-like context such as our various 'F' methods with // format strings. template<typename T> diff --git a/runtime/base/mutex.cc b/runtime/base/mutex.cc index 532e6c4..fdd0249 100644 --- a/runtime/base/mutex.cc +++ b/runtime/base/mutex.cc @@ -31,7 +31,6 @@ namespace art { Mutex* Locks::abort_lock_ = nullptr; Mutex* Locks::breakpoint_lock_ = nullptr; -Mutex* Locks::deoptimization_lock_ = nullptr; ReaderWriterMutex* Locks::classlinker_classes_lock_ = nullptr; ReaderWriterMutex* Locks::heap_bitmap_lock_ = nullptr; Mutex* Locks::logging_lock_ = nullptr; @@ -816,7 +815,6 @@ void Locks::Init() { // Already initialized. DCHECK(abort_lock_ != nullptr); DCHECK(breakpoint_lock_ != nullptr); - DCHECK(deoptimization_lock_ != nullptr); DCHECK(classlinker_classes_lock_ != nullptr); DCHECK(heap_bitmap_lock_ != nullptr); DCHECK(logging_lock_ != nullptr); @@ -833,8 +831,6 @@ void Locks::Init() { DCHECK(breakpoint_lock_ == nullptr); breakpoint_lock_ = new Mutex("breakpoint lock", kBreakpointLock); - DCHECK(deoptimization_lock_ == nullptr); - deoptimization_lock_ = new Mutex("deoptimization lock", kDeoptimizationLock); DCHECK(classlinker_classes_lock_ == nullptr); classlinker_classes_lock_ = new ReaderWriterMutex("ClassLinker classes lock", kClassLinkerClassesLock); diff --git a/runtime/base/mutex.h b/runtime/base/mutex.h index 55ec1c3..4b881f6 100644 --- a/runtime/base/mutex.h +++ b/runtime/base/mutex.h @@ -537,11 +537,8 @@ class Locks { // Guards breakpoints. static Mutex* breakpoint_lock_ ACQUIRED_AFTER(thread_list_lock_); - // Guards deoptimization requests. - static Mutex* deoptimization_lock_ ACQUIRED_AFTER(breakpoint_lock_); - // Guards trace requests. - static Mutex* trace_lock_ ACQUIRED_AFTER(deoptimization_lock_); + static Mutex* trace_lock_ ACQUIRED_AFTER(breakpoint_lock_); // Guards profile objects. static Mutex* profiler_lock_ ACQUIRED_AFTER(trace_lock_); diff --git a/runtime/base/timing_logger.cc b/runtime/base/timing_logger.cc index fe18f66..a155002 100644 --- a/runtime/base/timing_logger.cc +++ b/runtime/base/timing_logger.cc @@ -54,38 +54,24 @@ void CumulativeLogger::Start() { void CumulativeLogger::End() { MutexLock mu(Thread::Current(), lock_); - iterations_++; + ++iterations_; } void CumulativeLogger::Reset() { MutexLock mu(Thread::Current(), lock_); iterations_ = 0; + total_time_ = 0; STLDeleteElements(&histograms_); } -uint64_t CumulativeLogger::GetTotalNs() const { - MutexLock mu(Thread::Current(), lock_); - return GetTotalTime() * kAdjust; -} - -uint64_t CumulativeLogger::GetTotalTime() const { - MutexLock mu(Thread::Current(), lock_); - uint64_t total = 0; - for (Histogram<uint64_t>* histogram : histograms_) { - total += histogram->Sum(); - } - return total; -} - void CumulativeLogger::AddLogger(const TimingLogger &logger) { MutexLock mu(Thread::Current(), lock_); - const TimingLogger::SplitTimings& splits = logger.GetSplits(); - for (auto it = splits.begin(), end = splits.end(); it != end; ++it) { - TimingLogger::SplitTiming split = *it; + for (const TimingLogger::SplitTiming& split : logger.GetSplits()) { uint64_t split_time = split.first; const char* split_name = split.second; AddPair(split_name, split_time); } + ++iterations_; } size_t CumulativeLogger::GetIterations() const { @@ -93,7 +79,7 @@ size_t CumulativeLogger::GetIterations() const { return iterations_; } -void CumulativeLogger::Dump(std::ostream &os) { +void CumulativeLogger::Dump(std::ostream &os) const { MutexLock mu(Thread::Current(), lock_); DumpHistogram(os); } @@ -101,7 +87,7 @@ void CumulativeLogger::Dump(std::ostream &os) { void CumulativeLogger::AddPair(const std::string& label, uint64_t delta_time) { // Convert delta time to microseconds so that we don't overflow our counters. delta_time /= kAdjust; - + total_time_ += delta_time; Histogram<uint64_t>* histogram; Histogram<uint64_t> dummy(label.c_str()); auto it = histograms_.find(&dummy); @@ -123,7 +109,7 @@ class CompareHistorgramByTimeSpentDeclining { } }; -void CumulativeLogger::DumpHistogram(std::ostream &os) { +void CumulativeLogger::DumpHistogram(std::ostream &os) const { os << "Start Dumping histograms for " << iterations_ << " iterations" << " for " << name_ << "\n"; std::set<Histogram<uint64_t>*, CompareHistorgramByTimeSpentDeclining> @@ -174,8 +160,7 @@ void TimingLogger::NewSplit(const char* new_split_label) { uint64_t TimingLogger::GetTotalNs() const { uint64_t total_ns = 0; - for (auto it = splits_.begin(), end = splits_.end(); it != end; ++it) { - TimingLogger::SplitTiming split = *it; + for (const TimingLogger::SplitTiming& split : splits_) { total_ns += split.first; } return total_ns; @@ -184,8 +169,7 @@ uint64_t TimingLogger::GetTotalNs() const { void TimingLogger::Dump(std::ostream &os) const { uint64_t longest_split = 0; uint64_t total_ns = 0; - for (auto it = splits_.begin(), end = splits_.end(); it != end; ++it) { - TimingLogger::SplitTiming split = *it; + for (const SplitTiming& split : splits_) { uint64_t split_time = split.first; longest_split = std::max(longest_split, split_time); total_ns += split_time; @@ -194,8 +178,7 @@ void TimingLogger::Dump(std::ostream &os) const { TimeUnit tu = GetAppropriateTimeUnit(longest_split); uint64_t divisor = GetNsToTimeUnitDivisor(tu); // Print formatted splits. - for (auto it = splits_.begin(), end = splits_.end(); it != end; ++it) { - const TimingLogger::SplitTiming& split = *it; + for (const SplitTiming& split : splits_) { uint64_t split_time = split.first; if (!precise_ && divisor >= 1000) { // Make the fractional part 0. @@ -207,7 +190,6 @@ void TimingLogger::Dump(std::ostream &os) const { os << name_ << ": end, " << NsToMs(total_ns) << " ms\n"; } - TimingLogger::ScopedSplit::ScopedSplit(const char* label, TimingLogger* timing_logger) { DCHECK(label != NULL) << "New scoped split (" << label << ") with null label."; CHECK(timing_logger != NULL) << "New scoped split (" << label << ") without TimingLogger."; diff --git a/runtime/base/timing_logger.h b/runtime/base/timing_logger.h index b0bcf10..9b55898 100644 --- a/runtime/base/timing_logger.h +++ b/runtime/base/timing_logger.h @@ -35,8 +35,10 @@ class CumulativeLogger { void Start(); void End() LOCKS_EXCLUDED(lock_); void Reset() LOCKS_EXCLUDED(lock_); - void Dump(std::ostream& os) LOCKS_EXCLUDED(lock_); - uint64_t GetTotalNs() const; + void Dump(std::ostream& os) const LOCKS_EXCLUDED(lock_); + uint64_t GetTotalNs() const { + return GetTotalTime() * kAdjust; + } // Allow the name to be modified, particularly when the cumulative logger is a field within a // parent class that is unable to determine the "name" of a sub-class. void SetName(const std::string& name) LOCKS_EXCLUDED(lock_); @@ -57,14 +59,17 @@ class CumulativeLogger { void AddPair(const std::string &label, uint64_t delta_time) EXCLUSIVE_LOCKS_REQUIRED(lock_); - void DumpHistogram(std::ostream &os) EXCLUSIVE_LOCKS_REQUIRED(lock_); - uint64_t GetTotalTime() const; + void DumpHistogram(std::ostream &os) const EXCLUSIVE_LOCKS_REQUIRED(lock_); + uint64_t GetTotalTime() const { + return total_time_; + } static const uint64_t kAdjust = 1000; std::set<Histogram<uint64_t>*, HistogramComparator> histograms_ GUARDED_BY(lock_); std::string name_; const std::string lock_name_; mutable Mutex lock_ DEFAULT_MUTEX_ACQUIRED_AFTER; size_t iterations_ GUARDED_BY(lock_); + uint64_t total_time_; DISALLOW_COPY_AND_ASSIGN(CumulativeLogger); }; |