src/jdk.jfr/share/classes/jdk/jfr/internal/JVM.java
author mgronlun
Wed, 30 Oct 2019 19:43:52 +0100
changeset 58863 c16ac7a2eba4
parent 53014 339d2fbe8675
child 59226 a0f39cc47387
permissions -rw-r--r--
8226511: Implement JFR Event Streaming Reviewed-by: egahlin, mseledtsov, mgronlun Contributed-by: erik.gahlin@oracle.com, mikhailo.seledtsov@oracle.com, markus.gronlund@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
50113
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     1
/*
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
     2
 * Copyright (c) 2017, 2019, Oracle and/or its affiliates. All rights reserved.
50113
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     4
 *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    10
 *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    15
 * accompanied this code).
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    16
 *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    20
 *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    23
 * questions.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    24
 */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    25
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    26
package jdk.jfr.internal;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    27
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    28
import java.io.IOException;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    29
import java.util.List;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    30
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    31
import jdk.internal.HotSpotIntrinsicCandidate;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    32
import jdk.jfr.Event;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    33
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    34
/**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    35
 * Interface against the JVM.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    36
 *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    37
 */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    38
public final class JVM {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    39
    private static final JVM jvm = new JVM();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    40
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    41
    // JVM signals file changes by doing Object#notifu on this object
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    42
    static final Object FILE_DELTA_CHANGE = new Object();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    43
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    44
    static final long RESERVED_CLASS_ID_LIMIT = 400;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    45
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    46
    private volatile boolean recording;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    47
    private volatile boolean nativeOK;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    48
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    49
    private static native void registerNatives();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    50
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    51
    static {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    52
        registerNatives();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    53
        for (LogTag tag : LogTag.values()) {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    54
            subscribeLogLevel(tag, tag.id);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    55
        }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    56
        Options.ensureInitialized();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    57
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    58
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    59
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    60
     * Get the one and only JVM.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    61
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    62
     * @return the JVM
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    63
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    64
    public static JVM getJVM() {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    65
        return jvm;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    66
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    67
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    68
    private JVM() {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    69
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    70
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    71
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    72
     * Begin recording events
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    73
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    74
     * Requires that JFR has been started with {@link #createNativeJFR()}
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    75
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    76
    public native void beginRecording();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    77
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    78
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    79
     * Return ticks
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    80
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    81
     * @return the time, in ticks
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    82
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    83
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    84
    @HotSpotIntrinsicCandidate
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    85
    public static native long counterTime();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    86
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    87
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    88
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    89
     * Emits native periodic event.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    90
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    91
     * @param eventTypeId type id
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    92
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    93
     * @param timestamp commit time for event
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    94
     * @param when when it is being done {@link Periodic.When}
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    95
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    96
     * @return true if the event was committed
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    97
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    98
    public native boolean emitEvent(long eventTypeId, long timestamp, long when);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    99
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   100
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   101
     * End recording events, which includes flushing data in thread buffers
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   102
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   103
     * Requires that JFR has been started with {@link #createNativeJFR()}
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   104
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   105
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   106
    public native void endRecording();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   107
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   108
    /**
52334
a181612f0715 8203629: Produce events in the JDK without a dependency on jdk.jfr
egahlin
parents: 50113
diff changeset
   109
     * Return a list of all classes deriving from {@link jdk.internal.event.Event}
50113
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   110
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   111
     * @return list of event classes.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   112
     */
52334
a181612f0715 8203629: Produce events in the JDK without a dependency on jdk.jfr
egahlin
parents: 50113
diff changeset
   113
    public native List<Class<? extends jdk.internal.event.Event>> getAllEventClasses();
50113
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   114
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   115
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   116
     * Return a count of the number of unloaded classes deriving from {@link Event}
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   117
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   118
     * @return number of unloaded event classes.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   119
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   120
    public native long getUnloadedEventClassCount();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   121
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   122
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   123
     * Return a unique identifier for a class. The class is marked as being
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   124
     * "in use" in JFR.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   125
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   126
     * @param clazz clazz
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   127
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   128
     * @return a unique class identifier
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   129
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   130
   @HotSpotIntrinsicCandidate
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   131
    public static native long getClassId(Class<?> clazz);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   132
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   133
    // temporary workaround until we solve intrinsics supporting epoch shift tagging
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   134
    public static native long getClassIdNonIntrinsic(Class<?> clazz);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   135
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   136
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   137
     * Return process identifier.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   138
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   139
     * @return process identifier
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   140
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   141
    public native String getPid();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   142
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   143
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   144
     * Return unique identifier for stack trace.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   145
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   146
     * Requires that JFR has been started with {@link #createNativeJFR()}
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   147
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   148
     * @param skipCount number of frames to skip
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   149
     * @return a unique stack trace identifier
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   150
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   151
    public native long getStackTraceId(int skipCount);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   152
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   153
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   154
     * Return identifier for thread
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   155
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   156
     * @param t thread
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   157
     * @return a unique thread identifier
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   158
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   159
    public native long getThreadId(Thread t);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   160
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   161
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   162
     * Frequency, ticks per second
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   163
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   164
     * @return frequency
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   165
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   166
    public native long getTicksFrequency();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   167
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   168
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   169
     * Write message to log. Should swallow null or empty message, and be able
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   170
     * to handle any Java character and not crash with very large message
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   171
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   172
     * @param tagSetId the tagset id
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   173
     * @param level on level
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   174
     * @param message log message
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   175
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   176
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   177
    public static native void log(int tagSetId, int level, String message);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   178
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   179
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   180
     * Subscribe to LogLevel updates for LogTag
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   181
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   182
     * @param lt the log tag to subscribe
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   183
     * @param tagSetId the tagset id
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   184
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   185
    public static native void subscribeLogLevel(LogTag lt, int tagSetId);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   186
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   187
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   188
     * Call to invoke event tagging and retransformation of the passed classes
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   189
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   190
     * @param classes
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   191
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   192
    public native synchronized void retransformClasses(Class<?>[] classes);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   193
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   194
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   195
     * Enable event
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   196
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   197
     * @param eventTypeId event type id
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   198
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   199
     * @param enabled enable event
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   200
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   201
    public native void setEnabled(long eventTypeId, boolean enabled);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   202
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   203
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   204
     * Interval at which the JVM should notify on {@link #FILE_DELTA_CHANGE}
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   205
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   206
     * @param delta number of bytes, reset after file rotation
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   207
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   208
    public native void setFileNotification(long delta);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   209
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   210
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   211
     * Set the number of global buffers to use
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   212
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   213
     * @param count
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   214
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   215
     * @throws IllegalArgumentException if count is not within a valid range
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   216
     * @throws IllegalStateException if value can't be changed
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   217
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   218
    public native void setGlobalBufferCount(long count) throws IllegalArgumentException, IllegalStateException;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   219
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   220
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   221
     * Set size of a global buffer
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   222
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   223
     * @param size
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   224
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   225
     * @throws IllegalArgumentException if buffer size is not within a valid
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   226
     *         range
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   227
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   228
    public native void setGlobalBufferSize(long size) throws IllegalArgumentException;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   229
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   230
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   231
     * Set overall memory size
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   232
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   233
     * @param size
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   234
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   235
     * @throws IllegalArgumentException if memory size is not within a valid
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   236
     *         range
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   237
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   238
    public native void setMemorySize(long size) throws IllegalArgumentException;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   239
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   240
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   241
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   242
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   243
     * Set interval for method samples, in milliseconds.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   244
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   245
     * Setting interval to 0 turns off the method sampler.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   246
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   247
     * @param intervalMillis the sampling interval
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   248
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   249
    public native void setMethodSamplingInterval(long type, long intervalMillis);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   250
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   251
      /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   252
     * Sets the file where data should be written.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   253
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   254
     * Requires that JFR has been started with {@link #createNativeJFR()}
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   255
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   256
     * <pre>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   257
     * Recording  Previous  Current  Action
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   258
     * ==============================================
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   259
     *    true     null      null     Ignore, keep recording in-memory
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   260
     *    true     null      file1    Start disk recording
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   261
     *    true     file      null     Copy out metadata to disk and continue in-memory recording
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   262
     *    true     file1     file2    Copy out metadata and start with new File (file2)
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   263
     *    false     *        null     Ignore, but start recording to memory with {@link #beginRecording()}
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   264
     *    false     *        file     Ignore, but start recording to disk with {@link #beginRecording()}
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   265
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   266
     * </pre>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   267
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   268
     * recording can be set to true/false with {@link #beginRecording()}
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   269
     * {@link #endRecording()}
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   270
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   271
     * @param file the file where data should be written, or null if it should
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   272
     *        not be copied out (in memory).
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   273
     * @throws IOException
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   274
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   275
    public native void setOutput(String file);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   276
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   277
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   278
     * Controls if a class deriving from jdk.jfr.Event should
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   279
     * always be instrumented on class load.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   280
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   281
     * @param force, true to force initialization, false otherwise
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   282
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   283
    public native void setForceInstrumentation(boolean force);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   284
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   285
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   286
     * Turn on/off thread sampling.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   287
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   288
     * @param sampleThreads true if threads should be sampled, false otherwise.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   289
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   290
     * @throws IllegalStateException if state can't be changed.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   291
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   292
    public native void setSampleThreads(boolean sampleThreads) throws IllegalStateException;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   293
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   294
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   295
     * Turn on/off compressed integers.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   296
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   297
     * @param compressed true if compressed integers should be used, false
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   298
     *        otherwise.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   299
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   300
     * @throws IllegalStateException if state can't be changed.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   301
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   302
    public native void setCompressedIntegers(boolean compressed) throws IllegalStateException;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   303
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   304
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   305
     * Set stack depth.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   306
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   307
     * @param depth
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   308
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   309
     * @throws IllegalArgumentException if not within a valid range
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   310
     * @throws IllegalStateException if depth can't be changed
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   311
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   312
    public native void setStackDepth(int depth) throws IllegalArgumentException, IllegalStateException;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   313
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   314
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   315
     * Turn on stack trace for an event
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   316
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   317
     * @param eventTypeId the event id
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   318
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   319
     * @param enabled if stack traces should be enabled
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   320
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   321
    public native void setStackTraceEnabled(long eventTypeId, boolean enabled);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   322
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   323
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   324
     * Set thread buffer size.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   325
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   326
     * @param size
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   327
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   328
     * @throws IllegalArgumentException if size is not within a valid range
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   329
     * @throws IllegalStateException if size can't be changed
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   330
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   331
    public native void setThreadBufferSize(long size) throws IllegalArgumentException, IllegalStateException;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   332
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   333
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   334
     * Set threshold for event,
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   335
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   336
     * Long.MAXIMUM_VALUE = no limit
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   337
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   338
     * @param eventTypeId the id of the event type
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   339
     * @param ticks threshold in ticks,
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   340
     * @return true, if it could be set
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   341
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   342
    public native boolean setThreshold(long eventTypeId, long ticks);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   343
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   344
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   345
     * Store the metadata descriptor that is to be written at the end of a
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   346
     * chunk, data should be written after GMT offset and size of metadata event
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   347
     * should be adjusted
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   348
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   349
     * Requires that JFR has been started with {@link #createNativeJFR()}
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   350
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   351
     * @param bytes binary representation of metadata descriptor
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   352
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   353
     * @param binary representation of descriptor
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   354
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   355
    public native void storeMetadataDescriptor(byte[] bytes);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   356
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   357
    public void endRecording_() {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   358
        endRecording();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   359
        recording = false;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   360
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   361
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   362
    public void beginRecording_() {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   363
        beginRecording();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   364
        recording = true;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   365
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   366
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   367
    public boolean isRecording() {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   368
        return recording;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   369
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   370
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   371
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   372
     * If the JVM supports JVM TI and retransformation has not been disabled this
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   373
     * method will return true. This flag can not change during the lifetime of
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   374
     * the JVM.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   375
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   376
     * @return if transform is allowed
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   377
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   378
    public native boolean getAllowedToDoEventRetransforms();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   379
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   380
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   381
     * Set up native resources, data structures, threads etc. for JFR
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   382
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   383
     * @param simulateFailure simulate a initialization failure and rollback in
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   384
     *        native, used for testing purposes
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   385
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   386
     * @throws IllegalStateException if native part of JFR could not be created.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   387
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   388
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   389
    private native boolean createJFR(boolean simulateFailure) throws IllegalStateException;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   390
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   391
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   392
     * Destroys native part of JFR. If already destroy, call is ignored.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   393
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   394
     * Requires that JFR has been started with {@link #createNativeJFR()}
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   395
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   396
     * @return if an instance was actually destroyed.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   397
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   398
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   399
    private native boolean destroyJFR();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   400
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   401
    public boolean createFailedNativeJFR() throws IllegalStateException {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   402
        return createJFR(true);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   403
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   404
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   405
    public void createNativeJFR() {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   406
        nativeOK = createJFR(false);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   407
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   408
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   409
    public boolean destroyNativeJFR() {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   410
        boolean result = destroyJFR();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   411
        nativeOK = !result;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   412
        return result;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   413
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   414
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   415
    public boolean hasNativeJFR() {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   416
        return nativeOK;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   417
    }
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   418
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   419
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   420
     * Cheap test to check if JFR functionality is available.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   421
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   422
     * @return
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   423
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   424
    public native boolean isAvailable();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   425
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   426
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   427
     * To convert ticks to wall clock time.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   428
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   429
    public native double getTimeConversionFactor();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   430
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   431
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   432
     * Return a unique identifier for a class. Compared to {@link #getClassId()}
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   433
     * , this method does not tag the class as being "in-use".
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   434
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   435
     * @param clazz class
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   436
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   437
     * @return a unique class identifier
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   438
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   439
    public native long getTypeId(Class<?> clazz);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   440
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   441
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   442
     * Fast path fetching the EventWriter using VM intrinsics
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   443
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   444
     * @return thread local EventWriter
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   445
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   446
    @HotSpotIntrinsicCandidate
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   447
    public static native Object getEventWriter();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   448
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   449
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   450
     * Create a new EventWriter
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   451
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   452
     * @return thread local EventWriter
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   453
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   454
    public static native EventWriter newEventWriter();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   455
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   456
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   457
     * Flushes the EventWriter for this thread.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   458
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   459
    public static native boolean flush(EventWriter writer, int uncommittedSize, int requestedSize);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   460
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   461
    /**
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   462
     * Flushes all thread buffers to disk and the constant pool data needed to read
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   463
     * them.
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   464
     * <p>
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   465
     * When the method returns, the chunk header should be updated with valid
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   466
     * pointers to the metadata event, last check point event, correct file size and
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   467
     * the generation id.
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   468
     *
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   469
     */
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   470
    public native void flush();
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   471
    /**
50113
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   472
     * Sets the location of the disk repository, to be used at an emergency
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   473
     * dump.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   474
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   475
     * @param dirText
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   476
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   477
    public native void setRepositoryLocation(String dirText);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   478
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   479
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   480
    * Access to VM termination support.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   481
    *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   482
    *@param errorMsg descriptive message to be include in VM termination sequence
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   483
    */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   484
    public native void abort(String errorMsg);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   485
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   486
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   487
     * Adds a string to the string constant pool.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   488
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   489
     * If the same string is added twice, two entries will be created.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   490
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   491
     * @param id identifier associated with the string, not negative
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   492
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   493
     * @param s string constant to be added, not null
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   494
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   495
     * @return the current epoch of this insertion attempt
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   496
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   497
    public static native boolean addStringConstant(boolean epoch, long id, String s);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   498
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   499
     * Gets the address of the jboolean epoch.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   500
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   501
     * The epoch alternates every checkpoint.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   502
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   503
     * @return The address of the jboolean.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   504
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   505
    public native long getEpochAddress();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   506
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   507
    public native void uncaughtException(Thread thread, Throwable t);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   508
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   509
     * Sets cutoff for event.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   510
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   511
     * Determines how long the event should be allowed to run.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   512
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   513
     * Long.MAXIMUM_VALUE = no limit
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   514
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   515
     * @param eventTypeId the id of the event type
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   516
     * @param cutoffTicks cutoff in ticks,
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   517
     * @return true, if it could be set
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   518
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   519
    public native boolean setCutoff(long eventTypeId, long cutoffTicks);
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   520
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   521
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   522
     * Emit old object sample events.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   523
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   524
     * @param cutoff the cutoff in ticks
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   525
     * @param emitAll emit all samples in old object queue
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   526
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   527
    public native void emitOldObjectSamples(long cutoff, boolean emitAll);
53014
339d2fbe8675 8215284: Reduce noise induced by periodic task getFileSize()
mgronlun
parents: 52334
diff changeset
   528
339d2fbe8675 8215284: Reduce noise induced by periodic task getFileSize()
mgronlun
parents: 52334
diff changeset
   529
    /**
339d2fbe8675 8215284: Reduce noise induced by periodic task getFileSize()
mgronlun
parents: 52334
diff changeset
   530
     * Test if a chunk rotation is warranted.
339d2fbe8675 8215284: Reduce noise induced by periodic task getFileSize()
mgronlun
parents: 52334
diff changeset
   531
     *
339d2fbe8675 8215284: Reduce noise induced by periodic task getFileSize()
mgronlun
parents: 52334
diff changeset
   532
     * @return if it is time to perform a chunk rotation
339d2fbe8675 8215284: Reduce noise induced by periodic task getFileSize()
mgronlun
parents: 52334
diff changeset
   533
     */
339d2fbe8675 8215284: Reduce noise induced by periodic task getFileSize()
mgronlun
parents: 52334
diff changeset
   534
    public native boolean shouldRotateDisk();
58863
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   535
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   536
    /**
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   537
     * Exclude a thread from the jfr system
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   538
     *
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   539
     */
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   540
    public native void exclude(Thread thread);
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   541
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   542
    /**
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   543
     * Include a thread back into the jfr system
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   544
     *
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   545
     */
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   546
    public native void include(Thread thread);
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   547
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   548
    /**
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   549
     * Test if a thread ius currently excluded from the jfr system.
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   550
     *
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   551
     * @return is thread currently excluded
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   552
     */
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   553
    public native boolean isExcluded(Thread thread);
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   554
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   555
    /**
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   556
     * Get the start time in nanos from the header of the current chunk
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   557
     *
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   558
     *@return start time of the recording in nanos, -1 in case of in-memory
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   559
     */
c16ac7a2eba4 8226511: Implement JFR Event Streaming
mgronlun
parents: 53014
diff changeset
   560
    public native long getChunkStartNanos();
50113
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   561
}