Home | History | Annotate | Download | only in runtime
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef ART_RUNTIME_RUNTIME_STATS_H_
     18 #define ART_RUNTIME_RUNTIME_STATS_H_
     19 
     20 #include <stdint.h>
     21 
     22 namespace art {
     23 
     24 // These must match the values in dalvik.system.VMDebug.
     25 enum StatKinds {
     26   KIND_ALLOCATED_OBJECTS      = 1<<0,
     27   KIND_ALLOCATED_BYTES        = 1<<1,
     28   KIND_FREED_OBJECTS          = 1<<2,
     29   KIND_FREED_BYTES            = 1<<3,
     30   KIND_GC_INVOCATIONS         = 1<<4,
     31   KIND_CLASS_INIT_COUNT       = 1<<5,
     32   KIND_CLASS_INIT_TIME        = 1<<6,
     33 
     34   // These values exist for backward compatibility.
     35   KIND_EXT_ALLOCATED_OBJECTS = 1<<12,
     36   KIND_EXT_ALLOCATED_BYTES   = 1<<13,
     37   KIND_EXT_FREED_OBJECTS     = 1<<14,
     38   KIND_EXT_FREED_BYTES       = 1<<15,
     39 
     40   KIND_GLOBAL_ALLOCATED_OBJECTS   = KIND_ALLOCATED_OBJECTS,
     41   KIND_GLOBAL_ALLOCATED_BYTES     = KIND_ALLOCATED_BYTES,
     42   KIND_GLOBAL_FREED_OBJECTS       = KIND_FREED_OBJECTS,
     43   KIND_GLOBAL_FREED_BYTES         = KIND_FREED_BYTES,
     44   KIND_GLOBAL_GC_INVOCATIONS      = KIND_GC_INVOCATIONS,
     45   KIND_GLOBAL_CLASS_INIT_COUNT    = KIND_CLASS_INIT_COUNT,
     46   KIND_GLOBAL_CLASS_INIT_TIME     = KIND_CLASS_INIT_TIME,
     47 
     48   KIND_THREAD_ALLOCATED_OBJECTS   = KIND_ALLOCATED_OBJECTS << 16,
     49   KIND_THREAD_ALLOCATED_BYTES     = KIND_ALLOCATED_BYTES << 16,
     50   KIND_THREAD_FREED_OBJECTS       = KIND_FREED_OBJECTS << 16,
     51   KIND_THREAD_FREED_BYTES         = KIND_FREED_BYTES << 16,
     52 
     53   KIND_THREAD_GC_INVOCATIONS      = KIND_GC_INVOCATIONS << 16,
     54 
     55   // TODO: failedAllocCount, failedAllocSize
     56 };
     57 
     58 /*
     59  * Memory allocation profiler state.  This is used both globally and
     60  * per-thread.
     61  */
     62 struct PACKED(4) RuntimeStats {
     63   RuntimeStats() {
     64     Clear(~0);
     65   }
     66 
     67   void Clear(int flags) {
     68     if ((flags & KIND_ALLOCATED_OBJECTS) != 0) {
     69       allocated_objects = 0;
     70     }
     71     if ((flags & KIND_ALLOCATED_BYTES) != 0) {
     72       allocated_bytes = 0;
     73     }
     74     if ((flags & KIND_FREED_OBJECTS) != 0) {
     75       freed_objects = 0;
     76     }
     77     if ((flags & KIND_FREED_BYTES) != 0) {
     78       freed_bytes = 0;
     79     }
     80     if ((flags & KIND_GC_INVOCATIONS) != 0) {
     81       gc_for_alloc_count = 0;
     82     }
     83     if ((flags & KIND_CLASS_INIT_COUNT) != 0) {
     84       class_init_count = 0;
     85     }
     86     if ((flags & KIND_CLASS_INIT_TIME) != 0) {
     87       class_init_time_ns = 0;
     88     }
     89   }
     90 
     91   // Number of objects allocated.
     92   uint64_t allocated_objects;
     93   // Cumulative size of all objects allocated.
     94   uint64_t allocated_bytes;
     95 
     96   // Number of objects freed.
     97   uint64_t freed_objects;
     98   // Cumulative size of all freed objects.
     99   uint64_t freed_bytes;
    100 
    101   // Number of times an allocation triggered a GC.
    102   uint64_t gc_for_alloc_count;
    103 
    104   // Number of initialized classes.
    105   uint64_t class_init_count;
    106   // Cumulative time spent in class initialization.
    107   uint64_t class_init_time_ns;
    108 
    109   DISALLOW_COPY_AND_ASSIGN(RuntimeStats);
    110 };
    111 
    112 }  // namespace art
    113 
    114 #endif  // ART_RUNTIME_RUNTIME_STATS_H_
    115