xref: /aosp_15_r20/art/runtime/runtime_stats.h (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
1*795d594fSAndroid Build Coastguard Worker /*
2*795d594fSAndroid Build Coastguard Worker  * Copyright (C) 2008 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_RUNTIME_STATS_H_
18*795d594fSAndroid Build Coastguard Worker #define ART_RUNTIME_RUNTIME_STATS_H_
19*795d594fSAndroid Build Coastguard Worker 
20*795d594fSAndroid Build Coastguard Worker #include <stdint.h>
21*795d594fSAndroid Build Coastguard Worker 
22*795d594fSAndroid Build Coastguard Worker #include "base/macros.h"
23*795d594fSAndroid Build Coastguard Worker 
24*795d594fSAndroid Build Coastguard Worker namespace art HIDDEN {
25*795d594fSAndroid Build Coastguard Worker 
26*795d594fSAndroid Build Coastguard Worker // These must match the values in dalvik.system.VMDebug.
27*795d594fSAndroid Build Coastguard Worker enum StatKinds {
28*795d594fSAndroid Build Coastguard Worker   KIND_ALLOCATED_OBJECTS      = 1<<0,
29*795d594fSAndroid Build Coastguard Worker   KIND_ALLOCATED_BYTES        = 1<<1,
30*795d594fSAndroid Build Coastguard Worker   KIND_FREED_OBJECTS          = 1<<2,
31*795d594fSAndroid Build Coastguard Worker   KIND_FREED_BYTES            = 1<<3,
32*795d594fSAndroid Build Coastguard Worker   KIND_GC_INVOCATIONS         = 1<<4,
33*795d594fSAndroid Build Coastguard Worker   KIND_CLASS_INIT_COUNT       = 1<<5,
34*795d594fSAndroid Build Coastguard Worker   KIND_CLASS_INIT_TIME        = 1<<6,
35*795d594fSAndroid Build Coastguard Worker 
36*795d594fSAndroid Build Coastguard Worker   // These values exist for backward compatibility.
37*795d594fSAndroid Build Coastguard Worker   KIND_EXT_ALLOCATED_OBJECTS = 1<<12,
38*795d594fSAndroid Build Coastguard Worker   KIND_EXT_ALLOCATED_BYTES   = 1<<13,
39*795d594fSAndroid Build Coastguard Worker   KIND_EXT_FREED_OBJECTS     = 1<<14,
40*795d594fSAndroid Build Coastguard Worker   KIND_EXT_FREED_BYTES       = 1<<15,
41*795d594fSAndroid Build Coastguard Worker 
42*795d594fSAndroid Build Coastguard Worker   KIND_GLOBAL_ALLOCATED_OBJECTS   = KIND_ALLOCATED_OBJECTS,
43*795d594fSAndroid Build Coastguard Worker   KIND_GLOBAL_ALLOCATED_BYTES     = KIND_ALLOCATED_BYTES,
44*795d594fSAndroid Build Coastguard Worker   KIND_GLOBAL_FREED_OBJECTS       = KIND_FREED_OBJECTS,
45*795d594fSAndroid Build Coastguard Worker   KIND_GLOBAL_FREED_BYTES         = KIND_FREED_BYTES,
46*795d594fSAndroid Build Coastguard Worker   KIND_GLOBAL_GC_INVOCATIONS      = KIND_GC_INVOCATIONS,
47*795d594fSAndroid Build Coastguard Worker   KIND_GLOBAL_CLASS_INIT_COUNT    = KIND_CLASS_INIT_COUNT,
48*795d594fSAndroid Build Coastguard Worker   KIND_GLOBAL_CLASS_INIT_TIME     = KIND_CLASS_INIT_TIME,
49*795d594fSAndroid Build Coastguard Worker 
50*795d594fSAndroid Build Coastguard Worker   KIND_THREAD_ALLOCATED_OBJECTS   = KIND_ALLOCATED_OBJECTS << 16,
51*795d594fSAndroid Build Coastguard Worker   KIND_THREAD_ALLOCATED_BYTES     = KIND_ALLOCATED_BYTES << 16,
52*795d594fSAndroid Build Coastguard Worker   KIND_THREAD_FREED_OBJECTS       = KIND_FREED_OBJECTS << 16,
53*795d594fSAndroid Build Coastguard Worker   KIND_THREAD_FREED_BYTES         = KIND_FREED_BYTES << 16,
54*795d594fSAndroid Build Coastguard Worker 
55*795d594fSAndroid Build Coastguard Worker   KIND_THREAD_GC_INVOCATIONS      = KIND_GC_INVOCATIONS << 16,
56*795d594fSAndroid Build Coastguard Worker 
57*795d594fSAndroid Build Coastguard Worker   // TODO: failedAllocCount, failedAllocSize
58*795d594fSAndroid Build Coastguard Worker };
59*795d594fSAndroid Build Coastguard Worker 
60*795d594fSAndroid Build Coastguard Worker /*
61*795d594fSAndroid Build Coastguard Worker  * Memory allocation profiler state.  This is used both globally and
62*795d594fSAndroid Build Coastguard Worker  * per-thread.
63*795d594fSAndroid Build Coastguard Worker  */
64*795d594fSAndroid Build Coastguard Worker struct PACKED(4) RuntimeStats {
RuntimeStatsRuntimeStats65*795d594fSAndroid Build Coastguard Worker   RuntimeStats() {
66*795d594fSAndroid Build Coastguard Worker     Clear(~0);
67*795d594fSAndroid Build Coastguard Worker   }
68*795d594fSAndroid Build Coastguard Worker 
ClearRuntimeStats69*795d594fSAndroid Build Coastguard Worker   void Clear(int flags) {
70*795d594fSAndroid Build Coastguard Worker     if ((flags & KIND_ALLOCATED_OBJECTS) != 0) {
71*795d594fSAndroid Build Coastguard Worker       allocated_objects = 0;
72*795d594fSAndroid Build Coastguard Worker     }
73*795d594fSAndroid Build Coastguard Worker     if ((flags & KIND_ALLOCATED_BYTES) != 0) {
74*795d594fSAndroid Build Coastguard Worker       allocated_bytes = 0;
75*795d594fSAndroid Build Coastguard Worker     }
76*795d594fSAndroid Build Coastguard Worker     if ((flags & KIND_FREED_OBJECTS) != 0) {
77*795d594fSAndroid Build Coastguard Worker       freed_objects = 0;
78*795d594fSAndroid Build Coastguard Worker     }
79*795d594fSAndroid Build Coastguard Worker     if ((flags & KIND_FREED_BYTES) != 0) {
80*795d594fSAndroid Build Coastguard Worker       freed_bytes = 0;
81*795d594fSAndroid Build Coastguard Worker     }
82*795d594fSAndroid Build Coastguard Worker     if ((flags & KIND_GC_INVOCATIONS) != 0) {
83*795d594fSAndroid Build Coastguard Worker       gc_for_alloc_count = 0;
84*795d594fSAndroid Build Coastguard Worker     }
85*795d594fSAndroid Build Coastguard Worker     if ((flags & KIND_CLASS_INIT_COUNT) != 0) {
86*795d594fSAndroid Build Coastguard Worker       class_init_count = 0;
87*795d594fSAndroid Build Coastguard Worker     }
88*795d594fSAndroid Build Coastguard Worker     if ((flags & KIND_CLASS_INIT_TIME) != 0) {
89*795d594fSAndroid Build Coastguard Worker       class_init_time_ns = 0;
90*795d594fSAndroid Build Coastguard Worker     }
91*795d594fSAndroid Build Coastguard Worker   }
92*795d594fSAndroid Build Coastguard Worker 
93*795d594fSAndroid Build Coastguard Worker   // Number of objects allocated.
94*795d594fSAndroid Build Coastguard Worker   uint64_t allocated_objects;
95*795d594fSAndroid Build Coastguard Worker   // Cumulative size of all objects allocated.
96*795d594fSAndroid Build Coastguard Worker   uint64_t allocated_bytes;
97*795d594fSAndroid Build Coastguard Worker 
98*795d594fSAndroid Build Coastguard Worker   // Number of objects freed.
99*795d594fSAndroid Build Coastguard Worker   uint64_t freed_objects;
100*795d594fSAndroid Build Coastguard Worker   // Cumulative size of all freed objects.
101*795d594fSAndroid Build Coastguard Worker   uint64_t freed_bytes;
102*795d594fSAndroid Build Coastguard Worker 
103*795d594fSAndroid Build Coastguard Worker   // Number of times an allocation triggered a GC.
104*795d594fSAndroid Build Coastguard Worker   uint64_t gc_for_alloc_count;
105*795d594fSAndroid Build Coastguard Worker 
106*795d594fSAndroid Build Coastguard Worker   // Number of initialized classes.
107*795d594fSAndroid Build Coastguard Worker   uint64_t class_init_count;
108*795d594fSAndroid Build Coastguard Worker   // Cumulative time spent in class initialization.
109*795d594fSAndroid Build Coastguard Worker   uint64_t class_init_time_ns;
110*795d594fSAndroid Build Coastguard Worker 
111*795d594fSAndroid Build Coastguard Worker   DISALLOW_COPY_AND_ASSIGN(RuntimeStats);
112*795d594fSAndroid Build Coastguard Worker };
113*795d594fSAndroid Build Coastguard Worker 
114*795d594fSAndroid Build Coastguard Worker }  // namespace art
115*795d594fSAndroid Build Coastguard Worker 
116*795d594fSAndroid Build Coastguard Worker #endif  // ART_RUNTIME_RUNTIME_STATS_H_
117