js/src/vtune/jitprofiling.h

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /*
     2   This file is provided under a dual BSD/GPLv2 license.  When using or
     3   redistributing this file, you may do so under either license.
     5   GPL LICENSE SUMMARY
     7   Copyright (c) 2005-2013 Intel Corporation. All rights reserved.
     9   This program is free software; you can redistribute it and/or modify
    10   it under the terms of version 2 of the GNU General Public License as
    11   published by the Free Software Foundation.
    13   This program is distributed in the hope that it will be useful, but
    14   WITHOUT ANY WARRANTY; without even the implied warranty of
    15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    16   General Public License for more details.
    18   You should have received a copy of the GNU General Public License
    19   along with this program; if not, write to the Free Software
    20   Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
    21   The full GNU General Public License is included in this distribution
    22   in the file called LICENSE.GPL.
    24   Contact Information:
    25   http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/
    27   BSD LICENSE
    29   Copyright (c) 2005-2013 Intel Corporation. All rights reserved.
    30   All rights reserved.
    32   Redistribution and use in source and binary forms, with or without
    33   modification, are permitted provided that the following conditions
    34   are met:
    36     * Redistributions of source code must retain the above copyright
    37       notice, this list of conditions and the following disclaimer.
    38     * Redistributions in binary form must reproduce the above copyright
    39       notice, this list of conditions and the following disclaimer in
    40       the documentation and/or other materials provided with the
    41       distribution.
    42     * Neither the name of Intel Corporation nor the names of its
    43       contributors may be used to endorse or promote products derived
    44       from this software without specific prior written permission.
    46   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    47   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    48   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    49   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    50   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    51   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    52   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    53   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    54   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    55   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    56   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    57 */
    59 #ifndef __JITPROFILING_H__
    60 #define __JITPROFILING_H__
    62 /**
    63  * @brief JIT Profiling APIs
    64  *
    65  * The JIT Profiling API is used to report information about just-in-time
    66  * generated code that can be used by performance tools. The user inserts
    67  * calls in the code generator to report information before JIT-compiled
    68  * code goes to execution. This information is collected at runtime and used
    69  * by tools like Intel(R) VTune(TM) Amplifier to display performance metrics
    70  * associated with JIT-compiled code.
    71  *
    72  * These APIs can be used to\n
    73  * **Profile trace-based and method-based JIT-compiled
    74  * code**. Some examples of environments that you can profile with this APIs:
    75  * dynamic JIT compilation of JavaScript code traces, OpenCL JIT execution,
    76  * Java/.NET managed execution environments, and custom ISV JIT engines.
    77  *
    78  * @code
    79  * #include <jitprofiling.h>
    80  *
    81  * if (iJIT_IsProfilingActive != iJIT_SAMPLING_ON) {
    82  *     return;
    83  * }
    84  *
    85  * iJIT_Method_Load jmethod = {0};
    86  * jmethod.method_id = iJIT_GetNewMethodID();
    87  * jmethod.method_name = "method_name";
    88  * jmethod.class_file_name = "class_name";
    89  * jmethod.source_file_name = "source_file_name";
    90  * jmethod.method_load_address = code_addr;
    91  * jmethod.method_size = code_size;
    92  *
    93  * iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, (void*)&jmethod);
    94  * iJIT_NotifyEvent(iJVM_EVENT_TYPE_SHUTDOWN, NULL);
    95  * @endcode
    96  *
    97  *  * Expected behaviour:
    98  *    * If any iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED event overwrites
    99  *      already reported method, then such a method becomes invalid and its
   100  *      memory region is treated as unloaded. VTune Amplifier displays the metrics
   101  *      collected by the method until it is overwritten.
   102  *    * If supplied line number information contains multiple source lines for
   103  *      the same assembly instruction (code location), then VTune Amplifier picks up
   104  *      the first line number.
   105  *    * Dynamically generated code can be associated with a module name.
   106  *      Use the iJIT_Method_Load_V2 structure.\n
   107  *      Clarification of some cases:\n
   108  *        * If you register a function with the same method ID multiple times
   109  *          specifying different module names, then the VTune Amplifier picks up
   110  *          the module name registered first. If you want to distinguish the same
   111  *          function between different JIT engines, supply different method IDs for
   112  *          each function. Other symbolic information (for example, source file)
   113  *          can be identical.
   114  *
   115  * **Analyze split functions** (multiple joint or disjoint code regions
   116  * belonging to the same function) **including re-JIT**
   117  * with potential overlapping of code regions in time, which is common in
   118  * resource-limited environments.
   119  * @code
   120  * #include <jitprofiling.h>
   121  *
   122  * unsigned int method_id = iJIT_GetNewMethodID();
   123  *
   124  * iJIT_Method_Load a = {0};
   125  * a.method_id = method_id;
   126  * a.method_load_address = acode_addr;
   127  * a.method_size = acode_size;
   128  *
   129  * iJIT_Method_Load b = {0};
   130  * b.method_id = method_id;
   131  * b.method_load_address = baddr_second;
   132  * b.method_size = bsize_second;
   133  *
   134  * iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, (void*)&a);
   135  * iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, (void*)&b);
   136  * @endcode
   137  *
   138  *  * Expected behaviour:
   139  *      * If a iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED event overwrites
   140  *        already reported method, then such a method becomes invalid and
   141  *        its memory region is treated as unloaded.
   142  *      * All code regions reported with the same method ID are considered as
   143  *        belonging to the same method. Symbolic information (method name,
   144  *        source file name) will be taken from the first notification, all
   145  *        subsequent notifications with the same method ID will be processed
   146  *        only for line number table information. So, the VTune Amplifier will map
   147  *        samples to a source line using the line number table from the current
   148  *        notification while taking source file name from the very first one.\n
   149  *        Clarification of some cases:\n
   150  *          * If you register a second code region with a different source file
   151  *          name and the same method ID, then this information will be saved and
   152  *          will not be considered as an extension of the first code region, but
   153  *          VTune Amplifier will use source file of the first code region and map
   154  *          performance metrics incorrectly.
   155  *          * If you register a second code region with the same source file as
   156  *          for the first region and the same method ID, then source file will be
   157  *          discarded but VTune Amplifier will map metrics to the source file correctly.
   158  *          * If you register a second code region with a null source file and
   159  *          the same method ID, then provided line number info will be associated
   160  *          with the source file of the first code region.
   161  *
   162  * **Explore inline functions** including multi-level hierarchy of
   163  * nested inlines to see how performance metrics are distributed through them.
   164  *
   165  * @code
   166  * #include <jitprofiling.h>
   167  *
   168  *  //                                    method_id   parent_id
   169  *  //   [-- c --]                          3000        2000
   170  *  //                  [---- d -----]      2001        1000
   171  *  //  [---- b ----]                       2000        1000
   172  *  // [------------ a ----------------]    1000         n/a
   173  *
   174  * iJIT_Method_Load a = {0};
   175  * a.method_id = 1000;
   176  *
   177  * iJIT_Method_Inline_Load b = {0};
   178  * b.method_id = 2000;
   179  * b.parent_method_id = 1000;
   180  *
   181  * iJIT_Method_Inline_Load c = {0};
   182  * c.method_id = 3000;
   183  * c.parent_method_id = 2000;
   184  *
   185  * iJIT_Method_Inline_Load d = {0};
   186  * d.method_id = 2001;
   187  * d.parent_method_id = 1000;
   188  *
   189  * iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED, (void*)&a);
   190  * iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED, (void*)&b);
   191  * iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED, (void*)&c);
   192  * iJIT_NotifyEvent(iJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED, (void*)&d);
   193  * @endcode
   194  *
   195  *  * Requirements:
   196  *      * Each inline (iJIT_Method_Inline_Load) method should be associated
   197  *        with two method IDs: one for itself, one for its immediate parent.
   198  *      * Address regions of inline methods of the same parent method cannot
   199  *        overlap each other.
   200  *      * Execution of the parent method must not be started until it and all
   201  *        its inlines are reported.
   202  *  * Expected behaviour:
   203  *      * In case of nested inlines an order of
   204  *        iJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED events is not important.
   205  *      * If any event overwrites either inline method or top parent method,
   206  *        then the parent including inlines becomes invalid and its memory
   207  *        region is treated as unloaded.
   208  *
   209  * **Life time of allocated data**\n
   210  * The client sends an event notification to the agent with event-specific
   211  * data, which is a structure. The pointers in the structure refers to memory
   212  * allocated by the client, which responsible for releasing it. The pointers are
   213  * used by the iJIT_NotifyEvent method to copy client's data in a trace file
   214  * and they are not used after the iJIT_NotifyEvent method returns.
   215  *
   216  */
   218 /**
   219  * @defgroup jitapi JIT Profiling
   220  * @ingroup internal
   221  * @{
   222  */
   224 /**
   225  * @enum iJIT_jvm_event
   226  * @brief Enumerator for the types of notifications
   227  */
   228 typedef enum iJIT_jvm_event
   229 {
   230     iJVM_EVENT_TYPE_SHUTDOWN = 2,               /**< Send to shutdown the agent.
   231                                                  * Use NULL for event data. */
   233     iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED = 13,  /**< Send when a dynamic code is
   234                                                  * JIT compiled and loaded into
   235                                                  * memory by the JIT engine but
   236                                                  * before the code is executed.
   237                                                  * Use iJIT_Method_Load as event
   238                                                  * data. */
   239 /** @cond exclude_from_documentation */
   240     iJVM_EVENT_TYPE_METHOD_UNLOAD_START,    /**< Send when a compiled dynamic
   241                                              * code is being unloaded from memory.
   242                                              * Use iJIT_Method_Load as event data.*/
   243 /** @endcond */
   245 //TODO: add a note that line info assumes from method load
   246     iJVM_EVENT_TYPE_METHOD_UPDATE,   /**< Send to provide a new content for
   247                                       * an early reported dynamic code.
   248                                       * The previous content will be invalidate
   249                                       * starting from time of the notification.
   250                                       * Use iJIT_Method_Load as event data but
   251                                       * required fields are following:
   252                                       * - method_id    identify the code to update.
   253                                       * - method_load_address    specify start address
   254                                       *                          within identified code range
   255                                       *                          where update should be started.
   256                                       * - method_size            specify length of updated code
   257                                       *                          range. */
   259     iJVM_EVENT_TYPE_METHOD_INLINE_LOAD_FINISHED, /**< Send when an inline dynamic
   260                                                   * code is JIT compiled and loaded
   261                                                   * into memory by the JIT engine
   262                                                   * but before the parent code region
   263                                                   * is started executing.
   264                                                   * Use iJIT_Method_Inline_Load as event data.*/
   266 /** @cond exclude_from_documentation */
   267     /* Legacy stuff. Do not use it. */
   268     iJVM_EVENT_TYPE_ENTER_NIDS = 19,
   269     iJVM_EVENT_TYPE_LEAVE_NIDS,
   270 /** @endcond */
   272     iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V2  /**< Send when a dynamic code is
   273                                               * JIT compiled and loaded into
   274                                               * memory by the JIT engine but
   275                                               * before the code is executed.
   276                                               * Use iJIT_Method_Load_V2 as event
   277                                               * data. */
   278 } iJIT_JVM_EVENT;
   280 /** @cond exclude_from_documentation */
   281 /* Legacy stuff. Do not use it. */
   282 typedef enum _iJIT_ModeFlags
   283 {
   284     iJIT_NO_NOTIFICATIONS          = 0x0000,
   285     iJIT_BE_NOTIFY_ON_LOAD         = 0x0001,
   286     iJIT_BE_NOTIFY_ON_UNLOAD       = 0x0002,
   287     iJIT_BE_NOTIFY_ON_METHOD_ENTRY = 0x0004,
   288     iJIT_BE_NOTIFY_ON_METHOD_EXIT  = 0x0008
   290 } iJIT_ModeFlags;
   291 /** @endcond */
   293 /**
   294  * @enum _iJIT_IsProfilingActiveFlags
   295  * @brief Enumerator for the agent's mode
   296  */
   297 typedef enum _iJIT_IsProfilingActiveFlags
   298 {
   299     iJIT_NOTHING_RUNNING           = 0x0000,    /**< The agent is not running.
   300                                                  * iJIT_NotifyEvent calls will
   301                                                  * not be processed. */
   302     iJIT_SAMPLING_ON               = 0x0001,    /**< The agent is running and
   303                                                  * ready to process notifications. */
   305 /** @cond exclude_from_documentation */
   306     /* Legacy. Call Graph is running */
   307     iJIT_CALLGRAPH_ON              = 0x0002
   308 /** @endcond */
   310 } iJIT_IsProfilingActiveFlags;
   312 /** @cond exclude_from_documentation */
   313 /* Legacy stuff. Do not use it. */
   314 typedef enum _iJDEnvironmentType
   315 {
   316     iJDE_JittingAPI = 2
   318 } iJDEnvironmentType;
   320 typedef struct _iJIT_Method_Id
   321 {
   322     unsigned int method_id;
   324 } *piJIT_Method_Id, iJIT_Method_Id;
   326 typedef struct _iJIT_Method_NIDS
   327 {
   328     unsigned int method_id;     /**< Unique method ID */
   329     unsigned int stack_id;      /**< NOTE: no need to fill this field,
   330                                  * it's filled by VTune Amplifier */
   331     char*  method_name;         /**< Method name (just the method, without the class) */
   333 } *piJIT_Method_NIDS, iJIT_Method_NIDS;
   334 /** @endcond */
   336 typedef enum _iJIT_CodeType
   337 {
   338     iJIT_CT_UNKNOWN = 0,
   339     iJIT_CT_CODE,             // executable code
   340     iJIT_CT_DATA,             // this kind of “update” will be excluded from the function’s body.
   341     iJIT_CT_EOF
   342 } iJIT_CodeType;
   344 typedef struct _iJIT_Method_Update
   345 {
   346     unsigned int method_id;
   347     void* load_address;
   348     unsigned int size;
   349     iJIT_CodeType type;
   351 } *piJIT_Method_Update, iJIT_Method_Update;
   353 /**
   354  * @details Describes a single entry in the line number information of
   355  * a code region that gives information about how the reported code region
   356  * is mapped to source file.
   357  * Intel(R) VTune(TM) Amplifier uses line number information to attribute
   358  * the samples (virtual address) to a line number. \n
   359  * It is acceptable to report different code addresses for the same source line:
   360  * @code
   361  *   Offset LineNumber
   362  *      1       2
   363  *      12      4
   364  *      15      2
   365  *      18      1
   366  *      21      30
   367  *
   368  *  VTune(TM) Amplifier XE contsructs the following table using the client data
   369  *
   370  *   Code subrange  Line number
   371  *      0-1             2
   372  *      1-12            4
   373  *      12-15           2
   374  *      15-18           1
   375  *      18-21           30
   376  * @endcode
   377  */
   378 typedef struct _LineNumberInfo
   379 {
   380     unsigned int Offset;     /**< Offset from the begining of the code region. */
   381     unsigned int LineNumber; /**< Matching source line number offset (from beginning of source file). */
   383 } *pLineNumberInfo, LineNumberInfo;
   385 /**
   386  *  Description of a JIT-compiled method
   387  */
   388 typedef struct _iJIT_Method_Load
   389 {
   390     unsigned int method_id; /**< Unique method ID.
   391                              *  Method ID cannot be smaller than 999.
   392                              *  Either you use the API function
   393                              *  iJIT_GetNewMethodID to get a valid and unique
   394                              *  method ID, or you take care of ID uniqueness
   395                              *  and correct range by yourself.\n
   396                              *  You must use the same method ID for all code
   397                              *  regions of the same method, otherwise different
   398                              *  method IDs mean different methods. */
   400     char* method_name; /** The name of the method. It can be optionally
   401                         *  prefixed with its class name and appended with
   402                         *  its complete signature. Can't be  NULL. */
   404     void* method_load_address; /** The start virtual address of the method code
   405                                 *  region. If NULL that data provided with
   406                                 *  event are not accepted. */
   408     unsigned int method_size; /** The code size of the method in memory.
   409                                *  If 0, then data provided with the event are not
   410                                *  accepted. */
   412     unsigned int line_number_size; /** The number of entries in the line number
   413                                     *  table.0 if none. */
   415     pLineNumberInfo line_number_table; /** Pointer to the line numbers info
   416                                         *  array. Can be NULL if
   417                                         *  line_number_size is 0. See
   418                                         *  LineNumberInfo Structure for a
   419                                         *  description of a single entry in
   420                                         *  the line number info array */
   422     unsigned int class_id; /** This field is obsolete. */
   424     char* class_file_name; /** Class name. Can be NULL.*/
   426     char* source_file_name; /** Source file name. Can be NULL.*/
   428     void* user_data; /** This field is obsolete. */
   430     unsigned int user_data_size; /** This field is obsolete. */
   432     iJDEnvironmentType  env; /** This field is obsolete. */
   434 } *piJIT_Method_Load, iJIT_Method_Load;
   436 #pragma pack(push, 8)
   437 /**
   438  *  Description of a JIT-compiled method
   439  *
   440  *  When you use the iJIT_Method_Load_V2 structure to describe
   441  *  the JIT compiled method, use iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED_V2
   442  *  as an event type to report it.
   443  */
   444 typedef struct _iJIT_Method_Load_V2
   445 {
   446     unsigned int method_id; /**< Unique method ID.
   447                              *  Method ID cannot be smaller than 999.
   448                              *  Either you use the API function
   449                              *  iJIT_GetNewMethodID to get a valid and unique
   450                              *  method ID, or you take care of ID uniqueness
   451                              *  and correct range by yourself.\n
   452                              *  You must use the same method ID for all code
   453                              *  regions of the same method, otherwise different
   454                              *  method IDs mean different methods. */
   456     char* method_name; /** The name of the method. It can be optionally
   457                         *  prefixed with its class name and appended with
   458                         *  its complete signature. Can't be  NULL. */
   460     void* method_load_address; /** The start virtual address of the method code
   461                                 *  region. If NULL that data provided with
   462                                 *  event are not accepted. */
   464     unsigned int method_size; /** The code size of the method in memory.
   465                                *  If 0, then data provided with the event are not
   466                                *  accepted. */
   468     unsigned int line_number_size; /** The number of entries in the line number
   469                                     *  table.0 if none. */
   471     pLineNumberInfo line_number_table; /** Pointer to the line numbers info
   472                                         *  array. Can be NULL if
   473                                         *  line_number_size is 0. See
   474                                         *  LineNumberInfo Structure for a
   475                                         *  description of a single entry in
   476                                         *  the line number info array */
   478     char* class_file_name; /** Class name. Can be NULL.*/
   480     char* source_file_name; /** Source file name. Can be NULL.*/
   482     char* module_name; /** Module name. Can be NULL.
   483                            The module name can be useful for distinguishing among
   484                            different JIT engines. Intel VTune Amplifier will display
   485                            reported methods split by specified modules */
   487 } *piJIT_Method_Load_V2, iJIT_Method_Load_V2;
   488 #pragma pack(pop)
   490 /**
   491  * Description of an inline JIT-compiled method
   492  */
   493 typedef struct _iJIT_Method_Inline_Load
   494 {
   495     unsigned int method_id; /**< Unique method ID.
   496                              *  Method ID cannot be smaller than 999.
   497                              *  Either you use the API function
   498                              *  iJIT_GetNewMethodID to get a valid and unique
   499                              *  method ID, or you take care of ID uniqueness
   500                              *  and correct range by yourself. */
   502     unsigned int parent_method_id; /** Unique immediate parent's method ID.
   503                                     *  Method ID may not be smaller than 999.
   504                                     *  Either you use the API function
   505                                     *  iJIT_GetNewMethodID to get a valid and unique
   506                                     *  method ID, or you take care of ID uniqueness
   507                                     *  and correct range by yourself. */
   509     char* method_name; /** The name of the method. It can be optionally
   510                         *  prefixed with its class name and appended with
   511                         *  its complete signature. Can't be  NULL. */
   513     void* method_load_address;  /** The virtual address on which the method
   514                                   * is inlined. If NULL, then data provided with
   515                                   * the event are not accepted. */
   517     unsigned int method_size; /** The code size of the method in memory.
   518                                *  If 0 that data provided with event are not
   519                                *  accepted. */
   521     unsigned int line_number_size; /** The number of entries in the line number
   522                                     *  table. 0 if none. */
   524     pLineNumberInfo line_number_table; /** Pointer to the line numbers info
   525                                         *  array. Can be NULL if
   526                                         *  line_number_size is 0. See
   527                                         *  LineNumberInfo Structure for a
   528                                         *  description of a single entry in
   529                                         *  the line number info array */
   531     char* class_file_name; /** Class name. Can be NULL.*/
   533     char* source_file_name; /** Source file name. Can be NULL.*/
   535 } *piJIT_Method_Inline_Load, iJIT_Method_Inline_Load;
   537 /** @cond exclude_from_documentation */
   538 #ifdef __cplusplus
   539 extern "C" {
   540 #endif /* __cplusplus */
   542 #ifndef CDECL
   543 #  if defined WIN32 || defined _WIN32
   544 #    define CDECL __cdecl
   545 #  else /* defined WIN32 || defined _WIN32 */
   546 #    if defined _M_X64 || defined _M_AMD64 || defined __x86_64__
   547 #      define CDECL /* not actual on x86_64 platform */
   548 #    else  /* _M_X64 || _M_AMD64 || __x86_64__ */
   549 #      define CDECL __attribute__ ((cdecl))
   550 #    endif /* _M_X64 || _M_AMD64 || __x86_64__ */
   551 #  endif /* defined WIN32 || defined _WIN32 */
   552 #endif /* CDECL */
   554 #define JITAPI CDECL
   555 /** @endcond */
   557 /**
   558  * @brief Generates a new unique method ID.
   559  *
   560  * You must use this API to obtain unique and valid method IDs for methods or
   561  * traces reported to the agent if you don't have you own mechanism to generate
   562  * unique method IDs.
   563  *
   564  * @return a new unique method ID. When out of unique method IDs, this API
   565  * returns 0, which is not an accepted value.
   566  */
   567 unsigned int JITAPI iJIT_GetNewMethodID(void);
   569 /**
   570  * @brief Returns the current mode of the agent.
   571  *
   572  * @return iJIT_SAMPLING_ON, indicating that agent is running, or
   573  * iJIT_NOTHING_RUNNING if no agent is running.
   574  */
   575 iJIT_IsProfilingActiveFlags JITAPI iJIT_IsProfilingActive(void);
   577 /**
   578  * @brief Reports infomation about JIT-compiled code to the agent.
   579  *
   580  * The reported information is used to attribute samples obtained from any
   581  * Intel(R) VTune(TM) Amplifier collector. This API needs to be called
   582  * after JIT compilation and before the first entry into the JIT compiled
   583  * code.
   584  *
   585  * @param[in] event_type - type of the data sent to the agent
   586  * @param[in] EventSpecificData - pointer to event-specific data
   587  *
   588  * @returns 1 on success, otherwise 0.
   589  */
   590 int JITAPI iJIT_NotifyEvent(iJIT_JVM_EVENT event_type, void *EventSpecificData);
   592 /** @cond exclude_from_documentation */
   593 /*
   594  * Do not use these legacy APIs, which are here for backward compatibility
   595  * with Intel(R) VTune(TM) Performance Analyzer.
   596  */
   597 typedef void (*iJIT_ModeChangedEx)(void *UserData, iJIT_ModeFlags Flags);
   598 void JITAPI iJIT_RegisterCallbackEx(void *userdata,
   599                                     iJIT_ModeChangedEx NewModeCallBackFuncEx);
   600 void JITAPI FinalizeThread(void);
   601 void JITAPI FinalizeProcess(void);
   603 #ifdef __cplusplus
   604 }
   605 #endif /* __cplusplus */
   606 /** @endcond */
   608 /** @} jitapi group */
   610 #endif /* __JITPROFILING_H__ */

mercurial