Index: runtime/platform/thread.h |
diff --git a/runtime/platform/thread.h b/runtime/platform/thread.h |
index 4b19f8b5286755b6274632be6481624b898e639b..02ad51e74d831ac63889e09da046a03e1451c3b7 100644 |
--- a/runtime/platform/thread.h |
+++ b/runtime/platform/thread.h |
@@ -40,6 +40,8 @@ class Thread { |
} |
static void SetThreadLocal(ThreadLocalKey key, uword value); |
static intptr_t GetMaxStackSize(); |
+ static ThreadId GetCurrentThreadId(); |
+ static void GetThreadCpuUsage(ThreadId thread_id, int64_t* cpu_usage); |
}; |
@@ -76,6 +78,7 @@ class Monitor { |
// Wait for notification or timeout. |
WaitResult Wait(int64_t millis); |
+ WaitResult WaitMicros(int64_t micros); |
// Notify waiting threads. |
void Notify(); |
@@ -87,6 +90,59 @@ class Monitor { |
DISALLOW_COPY_AND_ASSIGN(Monitor); |
}; |
+ |
+class ScopedMutex { |
+ public: |
+ explicit ScopedMutex(Mutex* mutex) : mutex_(mutex) { |
+ ASSERT(mutex_ != NULL); |
+ mutex_->Lock(); |
+ } |
+ |
+ ~ScopedMutex() { |
+ mutex_->Unlock(); |
+ } |
+ |
+ private: |
+ Mutex* const mutex_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ScopedMutex); |
+}; |
+ |
+ |
+class ScopedMonitor { |
+ public: |
+ explicit ScopedMonitor(Monitor* monitor) : monitor_(monitor) { |
+ ASSERT(monitor_ != NULL); |
+ monitor_->Enter(); |
+ } |
+ |
+ ~ScopedMonitor() { |
+ monitor_->Exit(); |
+ } |
+ |
+ Monitor::WaitResult Wait(int64_t millis = dart::Monitor::kNoTimeout) { |
+ return monitor_->Wait(millis); |
+ } |
+ |
+ Monitor::WaitResult WaitMicros(int64_t micros = dart::Monitor::kNoTimeout) { |
+ return monitor_->WaitMicros(micros); |
+ } |
+ |
+ void Notify() { |
+ monitor_->Notify(); |
+ } |
+ |
+ void NotifyAll() { |
+ monitor_->NotifyAll(); |
+ } |
+ |
+ private: |
+ Monitor* const monitor_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ScopedMonitor); |
+}; |
+ |
+ |
} // namespace dart |