1 /*
   2  * Copyright (c) 2003, 2011, Oracle and/or its affiliates. All rights reserved.
   3  *
   4  * Redistribution and use in source and binary forms, with or without
   5  * modification, are permitted provided that the following conditions
   6  * are met:
   7  *
   8  *   - Redistributions of source code must retain the above copyright
   9  *     notice, this list of conditions and the following disclaimer.
  10  *
  11  *   - Redistributions in binary form must reproduce the above copyright
  12  *     notice, this list of conditions and the following disclaimer in the
  13  *     documentation and/or other materials provided with the distribution.
  14  *
  15  *   - Neither the name of Oracle nor the names of its
  16  *     contributors may be used to endorse or promote products derived
  17  *     from this software without specific prior written permission.
  18  *
  19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
  20  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  21  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  22  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  26  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  27  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  28  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  29  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  30  */
  31 
  32 /*
  33  * This source code is provided to illustrate the usage of a given feature
  34  * or technique and has been deliberately simplified. Additional steps
  35  * required for a production-quality application, such as security checks,
  36  * input validation and proper error handling, might not be present in
  37  * this sample code.
  38  */
  39 
  40 
  41 #ifndef HPROF_TLS_H
  42 #define HPROF_TLS_H
  43 
  44 void         tls_init(void);
  45 TlsIndex     tls_find_or_create(JNIEnv *env, jthread thread);
  46 void         tls_agent_thread(JNIEnv *env, jthread thread);
  47 SerialNumber tls_get_thread_serial_number(TlsIndex index);
  48 void         tls_list(void);
  49 void         tls_delete_global_references(JNIEnv *env);
  50 void         tls_garbage_collect(JNIEnv *env);
  51 void         tls_cleanup(void);
  52 void         tls_thread_ended(JNIEnv *env, TlsIndex index);
  53 void         tls_sample_all_threads(JNIEnv *env);
  54 
  55 MonitorIndex tls_get_monitor(TlsIndex index);
  56 void         tls_set_monitor(TlsIndex index, MonitorIndex monitor_index);
  57 
  58 void         tls_set_thread_object_index(TlsIndex index,
  59                         ObjectIndex thread_object_index);
  60 
  61 jint         tls_get_tracker_status(JNIEnv *env, jthread thread,
  62                         jboolean skip_init, jint **ppstatus, TlsIndex* pindex,
  63                         SerialNumber *pthread_serial_num,
  64                         TraceIndex *ptrace_index);
  65 
  66 void         tls_set_sample_status(ObjectIndex object_index, jint sample_status);
  67 jint         tls_sum_sample_status(void);
  68 
  69 void         tls_dump_traces(JNIEnv *env);
  70 
  71 void         tls_monitor_start_timer(TlsIndex index);
  72 jlong        tls_monitor_stop_timer(TlsIndex index);
  73 
  74 void         tls_dump_monitor_state(JNIEnv *env);
  75 
  76 void         tls_push_method(TlsIndex index, jmethodID method);
  77 void         tls_pop_method(TlsIndex index, jthread thread, jmethodID method);
  78 void         tls_pop_exception_catch(TlsIndex index, jthread thread, jmethodID method);
  79 
  80 TraceIndex   tls_get_trace(TlsIndex index, JNIEnv *env,
  81                            int depth, jboolean skip_init);
  82 
  83 void         tls_set_in_heap_dump(TlsIndex index, jint in_heap_dump);
  84 jint         tls_get_in_heap_dump(TlsIndex index);
  85 void         tls_clear_in_heap_dump(void);
  86 
  87 TlsIndex     tls_find(SerialNumber thread_serial_num);
  88 
  89 #endif