src/jdk.jfr/share/classes/jdk/jfr/Category.java
author mgronlun
Wed, 30 Oct 2019 19:43:52 +0100
changeset 58863 c16ac7a2eba4
parent 50113 caf115bb98ad
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
/*
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
     2
 * Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
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;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    27
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    28
import java.lang.annotation.ElementType;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    29
import java.lang.annotation.Inherited;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    30
import java.lang.annotation.Retention;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    31
import java.lang.annotation.RetentionPolicy;
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    32
import java.lang.annotation.Target;
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
 * Event annotation, to associate the event type with a category, in the format
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    36
 * of a human-readable path.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    37
 * <p>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    38
 * The category determines how an event is presented to the user. Events that
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    39
 * are in the same category are typically displayed together in graphs and
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    40
 * trees. To avoid the overlap of durational events in graphical
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    41
 * representations, overlapping events must be in separate categories.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    42
 * <p>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    43
 * For example, to monitor image uploads to a web server with a separate thread
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    44
 * for each upload, an event called File Upload starts when the user uploads a
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    45
 * file and ends when the upload is complete. For advanced diagnostics about
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    46
 * image uploads, more detailed events are created (for example, Image Read,
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    47
 * Image Resize, and Image Write). During these detailed events. other low
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    48
 * level-events could occur (for example, Socket Read and File Write).
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    49
 * <p>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    50
 * The following example shows a visualization that avoids overlaps:
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    51
 *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    52
 * <pre>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    53
 * -------------------------------------------------------------------
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    54
 *   |                         File Upload                        |
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    55
 * ------------------------------------------------------------------
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    56
 *   |       Image Read          | Image Resize |   Image Write   |
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    57
 * ------------------------------------------------------------------
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    58
 *   | Socket Read | Socket Read |              |    File Write   |
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    59
 * -------------------------------------------------------------------
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    60
 * </pre>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    61
 *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    62
 * The example can be achieved by using the following categories:
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    63
 *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    64
 * <table class="striped">
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    65
 * <caption>Recording options and their purpose.</caption> <thead>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    66
 * <tr>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    67
 * <th scope="col">Event Name</th>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    68
 * <th scope="col">Annotation</th>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    69
 * </tr>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    70
 * </thead> <tbody>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    71
 * <tr>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    72
 * <th scope="row">File Upload</th>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    73
 * <td><code>@Category("Upload")</code></td>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    74
 * </tr>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    75
 * <tr>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    76
 * <th scope="row">Image Read</th>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    77
 * <td><code>@Category({"Upload", "Image Upload"})</code></td>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    78
 * </tr>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    79
 * <tr>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    80
 * <th scope="row">Image Resize</th>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    81
 * <td><code>@Category({"Upload", "Image Upload"})</code></td>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    82
 * </tr>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    83
 * <tr>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    84
 * <th scope="row">Image Write</th>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    85
 * <td><code>@Category({"Upload", "Image Upload"})</code></td>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    86
 * </tr>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    87
 * <tr>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    88
 * <th scope="row">Socket Read</th>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    89
 * <td><code>@Category("Java Application")</code></td>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    90
 * </tr>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    91
 * <tr>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    92
 * <th scope="row">File Write</th>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    93
 * <td><code>@Category("Java Application")</code></td>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    94
 * </tr>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    95
 * </tbody>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    96
 * </table>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    97
 * <p>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    98
 * The File Upload, Image Read, and Socket Read events happen concurrently (in
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
    99
 * the same thread), but the events are in different categories so they do not
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   100
 * overlap in the visualization.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   101
 * <p>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   102
 * The following examples shows how the category is used to determine how events
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   103
 * are visualized in a tree:
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   104
 *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   105
 * <pre>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   106
 *  |- Java Application
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   107
 *  |  |- Socket Read
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   108
 *  |  |- File Write
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   109
 *  |- Upload
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   110
 *     |- File Upload
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   111
 *     |- Image Upload
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   112
 *        |- Image Read
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   113
 *        |- Image Resize
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   114
 *        |- File Write
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   115
 * </pre>
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   116
 *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   117
 * @since 9
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   118
 */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   119
@MetadataDefinition
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   120
@Target({ ElementType.TYPE })
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   121
@Inherited
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   122
@Retention(RetentionPolicy.RUNTIME)
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   123
public @interface Category {
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   124
    /**
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   125
     * Returns the category names for this annotation, starting with the root.
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   126
     *
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   127
     * @return the category names
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   128
     */
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   129
    String[] value();
caf115bb98ad 8199712: Flight Recorder
egahlin
parents:
diff changeset
   130
}