thread_status.cc 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. // Copyright (c) 2011-present, Facebook, Inc. All rights reserved.
  2. // This source code is licensed under both the GPLv2 (found in the
  3. // COPYING file in the root directory) and Apache 2.0 License
  4. // (found in the LICENSE.Apache file in the root directory).
  5. //
  6. // This file implements the "bridge" between Java and C++ and enables
  7. // calling c++ ROCKSDB_NAMESPACE::ThreadStatus methods from Java side.
  8. #include <jni.h>
  9. #include "portal.h"
  10. #include "include/org_rocksdb_ThreadStatus.h"
  11. #include "rocksdb/thread_status.h"
  12. /*
  13. * Class: org_rocksdb_ThreadStatus
  14. * Method: getThreadTypeName
  15. * Signature: (B)Ljava/lang/String;
  16. */
  17. jstring Java_org_rocksdb_ThreadStatus_getThreadTypeName(
  18. JNIEnv* env, jclass, jbyte jthread_type_value) {
  19. auto name = ROCKSDB_NAMESPACE::ThreadStatus::GetThreadTypeName(
  20. ROCKSDB_NAMESPACE::ThreadTypeJni::toCppThreadType(jthread_type_value));
  21. return ROCKSDB_NAMESPACE::JniUtil::toJavaString(env, &name, true);
  22. }
  23. /*
  24. * Class: org_rocksdb_ThreadStatus
  25. * Method: getOperationName
  26. * Signature: (B)Ljava/lang/String;
  27. */
  28. jstring Java_org_rocksdb_ThreadStatus_getOperationName(
  29. JNIEnv* env, jclass, jbyte joperation_type_value) {
  30. auto name = ROCKSDB_NAMESPACE::ThreadStatus::GetOperationName(
  31. ROCKSDB_NAMESPACE::OperationTypeJni::toCppOperationType(
  32. joperation_type_value));
  33. return ROCKSDB_NAMESPACE::JniUtil::toJavaString(env, &name, true);
  34. }
  35. /*
  36. * Class: org_rocksdb_ThreadStatus
  37. * Method: microsToStringNative
  38. * Signature: (J)Ljava/lang/String;
  39. */
  40. jstring Java_org_rocksdb_ThreadStatus_microsToStringNative(
  41. JNIEnv* env, jclass, jlong jmicros) {
  42. auto str = ROCKSDB_NAMESPACE::ThreadStatus::MicrosToString(
  43. static_cast<uint64_t>(jmicros));
  44. return ROCKSDB_NAMESPACE::JniUtil::toJavaString(env, &str, true);
  45. }
  46. /*
  47. * Class: org_rocksdb_ThreadStatus
  48. * Method: getOperationStageName
  49. * Signature: (B)Ljava/lang/String;
  50. */
  51. jstring Java_org_rocksdb_ThreadStatus_getOperationStageName(
  52. JNIEnv* env, jclass, jbyte joperation_stage_value) {
  53. auto name = ROCKSDB_NAMESPACE::ThreadStatus::GetOperationStageName(
  54. ROCKSDB_NAMESPACE::OperationStageJni::toCppOperationStage(
  55. joperation_stage_value));
  56. return ROCKSDB_NAMESPACE::JniUtil::toJavaString(env, &name, true);
  57. }
  58. /*
  59. * Class: org_rocksdb_ThreadStatus
  60. * Method: getOperationPropertyName
  61. * Signature: (BI)Ljava/lang/String;
  62. */
  63. jstring Java_org_rocksdb_ThreadStatus_getOperationPropertyName(
  64. JNIEnv* env, jclass, jbyte joperation_type_value, jint jindex) {
  65. auto name = ROCKSDB_NAMESPACE::ThreadStatus::GetOperationPropertyName(
  66. ROCKSDB_NAMESPACE::OperationTypeJni::toCppOperationType(
  67. joperation_type_value),
  68. static_cast<int>(jindex));
  69. return ROCKSDB_NAMESPACE::JniUtil::toJavaString(env, &name, true);
  70. }
  71. /*
  72. * Class: org_rocksdb_ThreadStatus
  73. * Method: interpretOperationProperties
  74. * Signature: (B[J)Ljava/util/Map;
  75. */
  76. jobject Java_org_rocksdb_ThreadStatus_interpretOperationProperties(
  77. JNIEnv* env, jclass, jbyte joperation_type_value,
  78. jlongArray joperation_properties) {
  79. //convert joperation_properties
  80. const jsize len = env->GetArrayLength(joperation_properties);
  81. const std::unique_ptr<uint64_t[]> op_properties(new uint64_t[len]);
  82. jlong* jop = env->GetLongArrayElements(joperation_properties, nullptr);
  83. if (jop == nullptr) {
  84. // exception thrown: OutOfMemoryError
  85. return nullptr;
  86. }
  87. for (jsize i = 0; i < len; i++) {
  88. op_properties[i] = static_cast<uint64_t>(jop[i]);
  89. }
  90. env->ReleaseLongArrayElements(joperation_properties, jop, JNI_ABORT);
  91. // call the function
  92. auto result = ROCKSDB_NAMESPACE::ThreadStatus::InterpretOperationProperties(
  93. ROCKSDB_NAMESPACE::OperationTypeJni::toCppOperationType(
  94. joperation_type_value),
  95. op_properties.get());
  96. jobject jresult = ROCKSDB_NAMESPACE::HashMapJni::fromCppMap(env, &result);
  97. if (env->ExceptionCheck()) {
  98. // exception occurred
  99. return nullptr;
  100. }
  101. return jresult;
  102. }
  103. /*
  104. * Class: org_rocksdb_ThreadStatus
  105. * Method: getStateName
  106. * Signature: (B)Ljava/lang/String;
  107. */
  108. jstring Java_org_rocksdb_ThreadStatus_getStateName(
  109. JNIEnv* env, jclass, jbyte jstate_type_value) {
  110. auto name = ROCKSDB_NAMESPACE::ThreadStatus::GetStateName(
  111. ROCKSDB_NAMESPACE::StateTypeJni::toCppStateType(jstate_type_value));
  112. return ROCKSDB_NAMESPACE::JniUtil::toJavaString(env, &name, true);
  113. }