src/hotspot/share/gc/g1/g1Trace.hpp
branchdatagramsocketimpl-branch
changeset 58678 9cf78a70fa4f
child 58679 9c3209ff7550
equal deleted inserted replaced
58677:13588c901957 58678:9cf78a70fa4f
       
     1 /*
       
     2  * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
       
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       
     4  *
       
     5  * This code is free software; you can redistribute it and/or modify it
       
     6  * under the terms of the GNU General Public License version 2 only, as
       
     7  * published by the Free Software Foundation.
       
     8  *
       
     9  * This code is distributed in the hope that it will be useful, but WITHOUT
       
    10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
       
    11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
       
    12  * version 2 for more details (a copy is included in the LICENSE file that
       
    13  * accompanied this code).
       
    14  *
       
    15  * You should have received a copy of the GNU General Public License version
       
    16  * 2 along with this work; if not, write to the Free Software Foundation,
       
    17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
       
    18  *
       
    19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
       
    20  * or visit www.oracle.com if you need additional information or have any
       
    21  * questions.
       
    22  *
       
    23  */
       
    24 
       
    25 #ifndef SHARE_GC_G1_G1TRACE_HPP
       
    26 #define SHARE_GC_G1_G1TRACE_HPP
       
    27 
       
    28 #include "gc/g1/g1YCTypes.hpp"
       
    29 #include "gc/shared/gcTrace.hpp"
       
    30 
       
    31 class G1EvacuationInfo;
       
    32 class G1HeapSummary;
       
    33 class G1EvacSummary;
       
    34 
       
    35 class G1YoungGCInfo {
       
    36   G1YCType _type;
       
    37 public:
       
    38   G1YoungGCInfo() : _type(G1YCTypeEndSentinel) {}
       
    39   void set_type(G1YCType type) {
       
    40     _type = type;
       
    41   }
       
    42   G1YCType type() const { return _type; }
       
    43 };
       
    44 
       
    45 class G1NewTracer : public YoungGCTracer {
       
    46   G1YoungGCInfo _g1_young_gc_info;
       
    47 
       
    48 public:
       
    49   G1NewTracer() : YoungGCTracer(G1New) {}
       
    50 
       
    51   void initialize();
       
    52   void report_yc_type(G1YCType type);
       
    53   void report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions);
       
    54   void report_evacuation_info(G1EvacuationInfo* info);
       
    55   void report_evacuation_failed(EvacuationFailedInfo& ef_info);
       
    56 
       
    57   void report_evacuation_statistics(const G1EvacSummary& young_summary, const G1EvacSummary& old_summary) const;
       
    58 
       
    59   void report_basic_ihop_statistics(size_t threshold,
       
    60                                     size_t target_occupancy,
       
    61                                     size_t current_occupancy,
       
    62                                     size_t last_allocation_size,
       
    63                                     double last_allocation_duration,
       
    64                                     double last_marking_length);
       
    65   void report_adaptive_ihop_statistics(size_t threshold,
       
    66                                        size_t internal_target_occupancy,
       
    67                                        size_t current_occupancy,
       
    68                                        size_t additional_buffer_size,
       
    69                                        double predicted_allocation_rate,
       
    70                                        double predicted_marking_length,
       
    71                                        bool prediction_active);
       
    72 private:
       
    73   void send_g1_young_gc_event();
       
    74   void send_evacuation_info_event(G1EvacuationInfo* info);
       
    75   void send_evacuation_failed_event(const EvacuationFailedInfo& ef_info) const;
       
    76 
       
    77   void send_young_evacuation_statistics(const G1EvacSummary& summary) const;
       
    78   void send_old_evacuation_statistics(const G1EvacSummary& summary) const;
       
    79 
       
    80   void send_basic_ihop_statistics(size_t threshold,
       
    81                                   size_t target_occupancy,
       
    82                                   size_t current_occupancy,
       
    83                                   size_t last_allocation_size,
       
    84                                   double last_allocation_duration,
       
    85                                   double last_marking_length);
       
    86   void send_adaptive_ihop_statistics(size_t threshold,
       
    87                                      size_t internal_target_occupancy,
       
    88                                      size_t current_occupancy,
       
    89                                      size_t additional_buffer_size,
       
    90                                      double predicted_allocation_rate,
       
    91                                      double predicted_marking_length,
       
    92                                      bool prediction_active);
       
    93 };
       
    94 
       
    95 class G1OldTracer : public OldGCTracer {
       
    96  protected:
       
    97   void report_gc_start_impl(GCCause::Cause cause, const Ticks& timestamp);
       
    98  public:
       
    99   G1OldTracer() : OldGCTracer(G1Old) {}
       
   100   void set_gc_cause(GCCause::Cause cause);
       
   101 };
       
   102 
       
   103 class G1FullGCTracer : public OldGCTracer {
       
   104 public:
       
   105   G1FullGCTracer() : OldGCTracer(G1Full) {}
       
   106 };
       
   107 
       
   108 class G1MMUTracer : public AllStatic {
       
   109   static void send_g1_mmu_event(double time_slice_ms, double gc_time_ms, double max_time_ms);
       
   110 
       
   111 public:
       
   112   static void report_mmu(double time_slice_sec, double gc_time_sec, double max_time_sec);
       
   113 };
       
   114 
       
   115 #endif