vm/vmcore/include/ti_thread.h (59 lines of code) (raw):
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef __TI_THREAD_H__
#define __TI_THREAD_H__
/**
* @file ti_thread.h
* @brief JVMTI support
* @details
* TI part of the Java threading interface.
* The TI part is mostly targeted to address the needs of JVMTI and
* <code>java.lang.management</code> classes needs.
* All functions start with <code>jthread_*</code> prefix.
*/
#include "open/hythread.h"
#include "jvmti_types.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/**
* JVM TI local storage structure.
*
* @param[in] thread
*/
typedef struct {
jvmtiEnv * env;
void * data;
} JVMTILocalStorage;
typedef struct HyThread *jthread_iterator_t;
/** @name State query
*/
//@{
VMEXPORT IDATA jthread_get_jvmti_state(jthread thread, jint *thread_state);
//@}
/** @name Instrumentation
*/
//@{
VMEXPORT IDATA jthread_get_all_threads(jthread** threads, jint *count);
VMEXPORT IDATA jthread_get_deadlocked_threads(jthread* thread_list, jint thread_count, jthread** dead_list, jint *dead_count);
VMEXPORT IDATA jthread_get_thread_count(jint *count);
VMEXPORT IDATA jthread_get_blocked_count(jint* count);
VMEXPORT IDATA jthread_get_waited_count(jint* count);
VMEXPORT IDATA jthread_get_total_started_thread_count(jint* count);
//@}
/** @name Monitor info
*/
//@{
VMEXPORT IDATA jthread_get_contended_monitor(jthread thread, jobject* monitor);
VMEXPORT IDATA jthread_get_wait_monitor(jthread thread, jobject* monitor);
VMEXPORT jboolean jthread_holds_lock(jthread thread, jobject monitor);
VMEXPORT IDATA jthread_get_lock_owner(jobject monitor, jthread* lock_owner);
VMEXPORT IDATA jthread_get_lock_recursion(jobject monitor, jthread lock_owner);
VMEXPORT IDATA jthread_get_owned_monitors(jthread thread, jint* mon_count_ptr, jobject** monitors);
VMEXPORT jboolean jthread_is_thread_contention_monitoring_enabled();
VMEXPORT jboolean jthread_is_thread_contention_monitoring_supported();
VMEXPORT void jthread_set_thread_contention_monitoring_enabled(jboolean flag);
//@}
/** @name CPU timing
*/
//@{
VMEXPORT IDATA jthread_get_thread_cpu_time(jthread thread, jlong *nanos_ptr);
VMEXPORT IDATA jthread_get_thread_user_cpu_time(jthread thread, jlong *nanos_ptr);
VMEXPORT IDATA jthread_get_thread_blocked_time(jthread thread, jlong *nanos_ptr);
VMEXPORT IDATA jthread_get_thread_waited_time(jthread thread, jlong *nanos_ptr);
VMEXPORT IDATA jthread_get_thread_cpu_timer_info(jvmtiTimerInfo* info_ptr);
VMEXPORT jlong jthread_get_thread_blocked_times_count(jthread java_thread);
VMEXPORT jlong jthread_get_thread_waited_times_count(jthread java_thread);
VMEXPORT jboolean jthread_is_current_thread_cpu_time_supported();
VMEXPORT jboolean jthread_is_thread_cpu_time_enabled();
VMEXPORT jboolean jthread_is_thread_cpu_time_supported();
VMEXPORT void jthread_set_thread_cpu_time_enabled(jboolean flag);
//@}
/** @name Peak count
*/
//@{
VMEXPORT IDATA jthread_reset_peak_thread_count();
VMEXPORT IDATA jthread_get_peak_thread_count(jint *threads_count_ptr);
//@}
/** @name Raw monitors
*/
//@{
VMEXPORT IDATA jthread_raw_monitor_create(jrawMonitorID *mon_ptr);
VMEXPORT IDATA jthread_raw_monitor_destroy(jrawMonitorID mon_ptr);
VMEXPORT IDATA jthread_raw_monitor_enter(jrawMonitorID mon_ptr);
VMEXPORT IDATA jthread_raw_monitor_try_enter(jrawMonitorID mon_ptr);
VMEXPORT IDATA jthread_raw_monitor_exit(jrawMonitorID mon_ptr);
VMEXPORT IDATA jthread_raw_monitor_notify(jrawMonitorID mon_ptr);
VMEXPORT IDATA jthread_raw_monitor_notify_all(jrawMonitorID mon_ptr);
VMEXPORT IDATA jthread_raw_monitor_wait(jrawMonitorID mon_ptr, I_64 millis);
//@}
VMEXPORT JVMTILocalStorage* jthread_get_jvmti_local_storage(jthread java_thread);
/** @name jthread iterators
*/
//@{
VMEXPORT jthread_iterator_t jthread_iterator_create(void);
VMEXPORT jthread jthread_iterator_next(jthread_iterator_t *it);
VMEXPORT IDATA jthread_iterator_reset(jthread_iterator_t *it);
VMEXPORT IDATA jthread_iterator_size(jthread_iterator_t iterator);
VMEXPORT IDATA jthread_iterator_release(jthread_iterator_t *it);
//@}
#ifdef __cplusplus
}
#endif
#endif /* __TI_THREAD_H__ */