/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ART_RUNTIME_GC_COLLECTOR_ITERATION_H_ #define ART_RUNTIME_GC_COLLECTOR_ITERATION_H_ #include #include #include "android-base/macros.h" #include "base/timing_logger.h" #include "gc/gc_cause.h" #include "object_byte_pair.h" namespace art { namespace gc { namespace collector { // A information related single garbage collector iteration. Since we only ever have one GC running // at any given time, we can have a single iteration info. class Iteration { public: Iteration(); // Returns how long the mutators were paused in nanoseconds. const std::vector& GetPauseTimes() const { return pause_times_; } TimingLogger* GetTimings() { return &timings_; } // Returns how long the GC took to complete in nanoseconds. uint64_t GetDurationNs() const { return duration_ns_; } int64_t GetFreedBytes() const { return freed_.bytes; } int64_t GetFreedLargeObjectBytes() const { return freed_los_.bytes; } uint64_t GetFreedObjects() const { return freed_.objects; } uint64_t GetFreedLargeObjects() const { return freed_los_.objects; } uint64_t GetFreedRevokeBytes() const { return freed_bytes_revoke_; } uint64_t GetScannedBytes() const { return bytes_scanned_; } void SetScannedBytes(uint64_t bytes) { bytes_scanned_ = bytes; } void SetFreedRevoke(uint64_t freed) { freed_bytes_revoke_ = freed; } void Reset(GcCause gc_cause, bool clear_soft_references); // Returns the estimated throughput of the iteration. uint64_t GetEstimatedThroughput() const; bool GetClearSoftReferences() const { return clear_soft_references_; } void SetClearSoftReferences(bool clear_soft_references) { clear_soft_references_ = clear_soft_references; } GcCause GetGcCause() const { return gc_cause_; } private: void SetDurationNs(uint64_t duration) { duration_ns_ = duration; } GcCause gc_cause_; bool clear_soft_references_; uint64_t duration_ns_; uint64_t bytes_scanned_; TimingLogger timings_; ObjectBytePair freed_; ObjectBytePair freed_los_; uint64_t freed_bytes_revoke_; // see Heap::num_bytes_freed_revoke_. std::vector pause_times_; friend class GarbageCollector; DISALLOW_COPY_AND_ASSIGN(Iteration); }; } // namespace collector } // namespace gc } // namespace art #endif // ART_RUNTIME_GC_COLLECTOR_ITERATION_H_