| 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
|
|
|
|
|
|
|