src/share/vm/jfr/recorder/checkpoint/jfrCheckpointManager.hpp

Mon, 19 Aug 2019 10:11:31 +0200

author
neugens
date
Mon, 19 Aug 2019 10:11:31 +0200
changeset 9861
a248d0be1309
parent 9858
b985cbb00e68
permissions
-rw-r--r--

8229401: Fix JFR code cache test failures
8223689: Add JFR Thread Sampling Support
8223690: Add JFR BiasedLock Event Support
8223691: Add JFR G1 Region Type Change Event Support
8223692: Add JFR G1 Heap Summary Event Support
Summary: Backport JFR from JDK11, additional fixes
Reviewed-by: neugens, apetushkov
Contributed-by: denghui.ddh@alibaba-inc.com

     1 /*
     2  * Copyright (c) 2016, 2018, 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  */
    25 #ifndef SHARE_VM_JFR_RECORDER_CHECKPOINT_JFRCHECKPOINTMANAGER_HPP
    26 #define SHARE_VM_JFR_RECORDER_CHECKPOINT_JFRCHECKPOINTMANAGER_HPP
    28 #include "jfr/recorder/storage/jfrBuffer.hpp"
    29 #include "jfr/recorder/storage/jfrMemorySpace.hpp"
    30 #include "jfr/recorder/storage/jfrMemorySpaceRetrieval.hpp"
    32 class JfrCheckpointManager;
    33 class JfrChunkWriter;
    34 class JfrSerializer;
    35 class JfrTypeManager;
    36 class Mutex;
    37 class Thread;
    39 struct JfrCheckpointEntry {
    40   jlong size;
    41   jlong start_time;
    42   jlong duration;
    43   juint flushpoint;
    44   juint nof_segments;
    45 };
    47 typedef JfrMemorySpace<JfrBuffer, JfrMspaceSequentialRetrieval, JfrCheckpointManager> JfrCheckpointMspace;
    49 //
    50 // Responsible for maintaining checkpoints and by implication types.
    51 // A checkpoint is an event that has a payload consisting of constant types.
    52 // A constant type is a binary relation, a set of key-value pairs.
    53 //
    54 class JfrCheckpointManager : public JfrCHeapObj {
    55  public:
    56   typedef JfrCheckpointMspace::Type Buffer;
    57  private:
    58   JfrCheckpointMspace* _free_list_mspace;
    59   JfrCheckpointMspace* _epoch_transition_mspace;
    60   Mutex* _lock;
    61   const Thread* _service_thread;
    62   JfrChunkWriter& _chunkwriter;
    63   u1 _checkpoint_epoch_state;
    65   // mspace callback
    66   void register_full(Buffer* t, Thread* thread);
    67   void lock();
    68   void unlock();
    69   DEBUG_ONLY(bool is_locked() const;)
    71   static Buffer* lease_buffer(Thread* t, size_t size = 0);
    72   static Buffer* flush(Buffer* old, size_t used, size_t requested, Thread* t);
    74   size_t clear();
    75   size_t write();
    76   size_t write_epoch_transition_mspace();
    77   size_t write_types();
    78   size_t write_safepoint_types();
    79   void write_type_set();
    80   void shift_epoch();
    81   void synchronize_epoch();
    82   bool use_epoch_transition_mspace(const Thread* t) const;
    84   JfrCheckpointManager(JfrChunkWriter& cw);
    85   ~JfrCheckpointManager();
    87   static JfrCheckpointManager& instance();
    88   static JfrCheckpointManager* create(JfrChunkWriter& cw);
    89   bool initialize();
    90   static void destroy();
    92  public:
    93   void register_service_thread(const Thread* t);
    94   static void write_type_set_for_unloaded_classes();
    95   static void create_thread_checkpoint(JavaThread* jt);
    96   static void write_thread_checkpoint(JavaThread* jt);
    98   friend class JfrRecorder;
    99   friend class JfrRecorderService;
   100   friend class JfrCheckpointFlush;
   101   friend class JfrCheckpointWriter;
   102   friend class JfrSerializer;
   103   friend class JfrStackTraceRepository;
   104   template <typename, template <typename> class, typename>
   105   friend class JfrMemorySpace;
   106 };
   108 #endif //SHARE_VM_JFR_RECORDER_CHECKPOINT_JFRCHECKPOINTMANAGER_HPP

mercurial