xref: /aosp_15_r20/art/runtime/gc/collector/iteration.h (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2012 The Android Open Source Project
3*795d594fSAndroid Build Coastguard Worker  *
4*795d594fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*795d594fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*795d594fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*795d594fSAndroid Build Coastguard Worker  *
8*795d594fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*795d594fSAndroid Build Coastguard Worker  *
10*795d594fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*795d594fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*795d594fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*795d594fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*795d594fSAndroid Build Coastguard Worker  * limitations under the License.
15*795d594fSAndroid Build Coastguard Worker  */
16*795d594fSAndroid Build Coastguard Worker 
17*795d594fSAndroid Build Coastguard Worker #ifndef ART_RUNTIME_GC_COLLECTOR_ITERATION_H_
18*795d594fSAndroid Build Coastguard Worker #define ART_RUNTIME_GC_COLLECTOR_ITERATION_H_
19*795d594fSAndroid Build Coastguard Worker 
20*795d594fSAndroid Build Coastguard Worker #include <inttypes.h>
21*795d594fSAndroid Build Coastguard Worker #include <vector>
22*795d594fSAndroid Build Coastguard Worker 
23*795d594fSAndroid Build Coastguard Worker #include "android-base/macros.h"
24*795d594fSAndroid Build Coastguard Worker #include "base/macros.h"
25*795d594fSAndroid Build Coastguard Worker #include "base/timing_logger.h"
26*795d594fSAndroid Build Coastguard Worker #include "gc/gc_cause.h"
27*795d594fSAndroid Build Coastguard Worker #include "object_byte_pair.h"
28*795d594fSAndroid Build Coastguard Worker 
29*795d594fSAndroid Build Coastguard Worker namespace art HIDDEN {
30*795d594fSAndroid Build Coastguard Worker namespace gc {
31*795d594fSAndroid Build Coastguard Worker namespace collector {
32*795d594fSAndroid Build Coastguard Worker 
33*795d594fSAndroid Build Coastguard Worker // A information related single garbage collector iteration. Since we only ever have one GC running
34*795d594fSAndroid Build Coastguard Worker // at any given time, we can have a single iteration info.
35*795d594fSAndroid Build Coastguard Worker class Iteration {
36*795d594fSAndroid Build Coastguard Worker  public:
37*795d594fSAndroid Build Coastguard Worker   Iteration();
38*795d594fSAndroid Build Coastguard Worker   // Returns how long the mutators were paused in nanoseconds.
GetPauseTimes()39*795d594fSAndroid Build Coastguard Worker   const std::vector<uint64_t>& GetPauseTimes() const {
40*795d594fSAndroid Build Coastguard Worker     return pause_times_;
41*795d594fSAndroid Build Coastguard Worker   }
GetTimings()42*795d594fSAndroid Build Coastguard Worker   TimingLogger* GetTimings() {
43*795d594fSAndroid Build Coastguard Worker     return &timings_;
44*795d594fSAndroid Build Coastguard Worker   }
45*795d594fSAndroid Build Coastguard Worker   // Returns how long the GC took to complete in nanoseconds.
GetDurationNs()46*795d594fSAndroid Build Coastguard Worker   uint64_t GetDurationNs() const {
47*795d594fSAndroid Build Coastguard Worker     return duration_ns_;
48*795d594fSAndroid Build Coastguard Worker   }
GetFreedBytes()49*795d594fSAndroid Build Coastguard Worker   int64_t GetFreedBytes() const {
50*795d594fSAndroid Build Coastguard Worker     return freed_.bytes;
51*795d594fSAndroid Build Coastguard Worker   }
GetFreedLargeObjectBytes()52*795d594fSAndroid Build Coastguard Worker   int64_t GetFreedLargeObjectBytes() const {
53*795d594fSAndroid Build Coastguard Worker     return freed_los_.bytes;
54*795d594fSAndroid Build Coastguard Worker   }
GetFreedObjects()55*795d594fSAndroid Build Coastguard Worker   uint64_t GetFreedObjects() const {
56*795d594fSAndroid Build Coastguard Worker     return freed_.objects;
57*795d594fSAndroid Build Coastguard Worker   }
GetFreedLargeObjects()58*795d594fSAndroid Build Coastguard Worker   uint64_t GetFreedLargeObjects() const {
59*795d594fSAndroid Build Coastguard Worker     return freed_los_.objects;
60*795d594fSAndroid Build Coastguard Worker   }
GetFreedRevokeBytes()61*795d594fSAndroid Build Coastguard Worker   uint64_t GetFreedRevokeBytes() const {
62*795d594fSAndroid Build Coastguard Worker     return freed_bytes_revoke_;
63*795d594fSAndroid Build Coastguard Worker   }
GetScannedBytes()64*795d594fSAndroid Build Coastguard Worker   uint64_t GetScannedBytes() const {
65*795d594fSAndroid Build Coastguard Worker     return bytes_scanned_;
66*795d594fSAndroid Build Coastguard Worker   }
SetScannedBytes(uint64_t bytes)67*795d594fSAndroid Build Coastguard Worker   void SetScannedBytes(uint64_t bytes) {
68*795d594fSAndroid Build Coastguard Worker       bytes_scanned_ = bytes;
69*795d594fSAndroid Build Coastguard Worker   }
SetFreedRevoke(uint64_t freed)70*795d594fSAndroid Build Coastguard Worker   void SetFreedRevoke(uint64_t freed) {
71*795d594fSAndroid Build Coastguard Worker     freed_bytes_revoke_ = freed;
72*795d594fSAndroid Build Coastguard Worker   }
73*795d594fSAndroid Build Coastguard Worker   void Reset(GcCause gc_cause, bool clear_soft_references);
74*795d594fSAndroid Build Coastguard Worker   // Returns the estimated throughput of the iteration.
75*795d594fSAndroid Build Coastguard Worker   uint64_t GetEstimatedThroughput() const;
GetClearSoftReferences()76*795d594fSAndroid Build Coastguard Worker   bool GetClearSoftReferences() const {
77*795d594fSAndroid Build Coastguard Worker     return clear_soft_references_;
78*795d594fSAndroid Build Coastguard Worker   }
SetClearSoftReferences(bool clear_soft_references)79*795d594fSAndroid Build Coastguard Worker   void SetClearSoftReferences(bool clear_soft_references) {
80*795d594fSAndroid Build Coastguard Worker     clear_soft_references_ = clear_soft_references;
81*795d594fSAndroid Build Coastguard Worker   }
GetGcCause()82*795d594fSAndroid Build Coastguard Worker   GcCause GetGcCause() const {
83*795d594fSAndroid Build Coastguard Worker     return gc_cause_;
84*795d594fSAndroid Build Coastguard Worker   }
85*795d594fSAndroid Build Coastguard Worker 
86*795d594fSAndroid Build Coastguard Worker  private:
SetDurationNs(uint64_t duration)87*795d594fSAndroid Build Coastguard Worker   void SetDurationNs(uint64_t duration) {
88*795d594fSAndroid Build Coastguard Worker     duration_ns_ = duration;
89*795d594fSAndroid Build Coastguard Worker   }
90*795d594fSAndroid Build Coastguard Worker 
91*795d594fSAndroid Build Coastguard Worker   GcCause gc_cause_;
92*795d594fSAndroid Build Coastguard Worker   bool clear_soft_references_;
93*795d594fSAndroid Build Coastguard Worker   uint64_t duration_ns_;
94*795d594fSAndroid Build Coastguard Worker   uint64_t bytes_scanned_;
95*795d594fSAndroid Build Coastguard Worker   TimingLogger timings_;
96*795d594fSAndroid Build Coastguard Worker   ObjectBytePair freed_;
97*795d594fSAndroid Build Coastguard Worker   ObjectBytePair freed_los_;
98*795d594fSAndroid Build Coastguard Worker   uint64_t freed_bytes_revoke_;  // see Heap::num_bytes_freed_revoke_.
99*795d594fSAndroid Build Coastguard Worker   std::vector<uint64_t> pause_times_;
100*795d594fSAndroid Build Coastguard Worker 
101*795d594fSAndroid Build Coastguard Worker   friend class GarbageCollector;
102*795d594fSAndroid Build Coastguard Worker   DISALLOW_COPY_AND_ASSIGN(Iteration);
103*795d594fSAndroid Build Coastguard Worker };
104*795d594fSAndroid Build Coastguard Worker 
105*795d594fSAndroid Build Coastguard Worker }  // namespace collector
106*795d594fSAndroid Build Coastguard Worker }  // namespace gc
107*795d594fSAndroid Build Coastguard Worker }  // namespace art
108*795d594fSAndroid Build Coastguard Worker 
109*795d594fSAndroid Build Coastguard Worker #endif  // ART_RUNTIME_GC_COLLECTOR_ITERATION_H_
110