Add infrastructure for registering built-in native methods.
While I'm here, make fiddling with Thread state easier.
Change-Id: I3d215a3a852aa8970c3974b2edefce9dd261ccd7
diff --git a/src/thread.h b/src/thread.h
index 41bb0da..86e78b7 100644
--- a/src/thread.h
+++ b/src/thread.h
@@ -320,8 +320,10 @@
return state_;
}
- void SetState(State new_state) {
+ State SetState(State new_state) {
+ State old_state = state_;
state_ = new_state;
+ return old_state;
}
static ThreadOffset SuspendCountOffset() {
@@ -531,8 +533,7 @@
}
Thread::State old_state;
if (current_thread != NULL) {
- old_state = current_thread->GetState();
- current_thread->SetState(Thread::kWaiting); // TODO: VMWAIT
+ old_state = current_thread->SetState(Thread::kWaiting); // TODO: VMWAIT
} else {
// happens during VM shutdown
old_state = Thread::kUnknown; // TODO: something else
@@ -553,6 +554,22 @@
DISALLOW_COPY_AND_ASSIGN(ThreadListLock);
};
+class ScopedThreadStateChange {
+ public:
+ ScopedThreadStateChange(Thread* thread, Thread::State new_state) : thread_(thread) {
+ old_thread_state_ = thread_->SetState(new_state);
+ }
+
+ ~ScopedThreadStateChange() {
+ thread_->SetState(old_thread_state_);
+ }
+
+ private:
+ Thread* thread_;
+ Thread::State old_thread_state_;
+ DISALLOW_COPY_AND_ASSIGN(ScopedThreadStateChange);
+};
+
} // namespace art
#endif // ART_SRC_THREAD_H_