Add utility functions for interpreting ThreadStatus

Summary:
Add ThreadStatus::GetOperationName() and ThreadStatus::GetStateName(),
two utility functions that help interpreting ThreadStatus.

Test Plan: ./thread_list_test

Reviewers: sdong, rven, igor

Reviewed By: igor

Subscribers: dhruba, leveldb

Differential Revision: https://reviews.facebook.net/D32793
This commit is contained in:
Yueh-Hsuan Chiang 2015-02-04 01:47:32 -08:00
parent 4d98e29352
commit 678503ebcf
3 changed files with 54 additions and 0 deletions

View File

@ -89,6 +89,16 @@ struct ThreadStatus {
// The state (lower-level action) that the current thread is involved. // The state (lower-level action) that the current thread is involved.
const StateType state_type; const StateType state_type;
// The followings are a set of utility functions for interpreting
// the information of ThreadStatus
// Obtain the name of an operation given its type.
static const std::string& GetOperationName(OperationType op_type);
// Obtain the name of a state given its type.
static const std::string& GetStateName(StateType state_type);
}; };
} // namespace rocksdb } // namespace rocksdb

View File

@ -98,10 +98,16 @@ TEST(ThreadListTest, EventTables) {
// verify the global tables for operations and states are properly indexed. // verify the global tables for operations and states are properly indexed.
for (int type = 0; type != ThreadStatus::NUM_OP_TYPES; ++type) { for (int type = 0; type != ThreadStatus::NUM_OP_TYPES; ++type) {
ASSERT_EQ(global_operation_table[type].type, type); ASSERT_EQ(global_operation_table[type].type, type);
ASSERT_EQ(global_operation_table[type].name,
ThreadStatus::GetOperationName(
ThreadStatus::OperationType(type)));
} }
for (int type = 0; type != ThreadStatus::NUM_STATE_TYPES; ++type) { for (int type = 0; type != ThreadStatus::NUM_STATE_TYPES; ++type) {
ASSERT_EQ(global_state_table[type].type, type); ASSERT_EQ(global_state_table[type].type, type);
ASSERT_EQ(global_state_table[type].name,
ThreadStatus::GetStateName(
ThreadStatus::StateType(type)));
} }
} }

View File

@ -0,0 +1,38 @@
// Copyright (c) 2013, Facebook, Inc. All rights reserved.
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree. An additional grant
// of patent rights can be found in the PATENTS file in the same directory.
//
#include "rocksdb/thread_status.h"
#include "util/thread_operation.h"
namespace rocksdb {
#if ROCKSDB_USING_THREAD_STATUS
const std::string& ThreadStatus::GetOperationName(
ThreadStatus::OperationType op_type) {
return global_operation_table[op_type].name;
}
const std::string& ThreadStatus::GetStateName(
ThreadStatus::StateType state_type) {
return global_state_table[state_type].name;
}
#else
const std::string& ThreadStatus::GetOperationName(
ThreadStatus::OperationType op_type) {
static std::string dummy_str = "";
return dummy_str;
}
const std::string& ThreadStatus::GetStateName(
ThreadStatus::StateType state_type) {
static std::string dummy_str = "";
return dummy_str;
}
#endif // ROCKSDB_USING_THREAD_STATUS
} // namespace rocksdb