Index: Source/core/dom/LockManager.h |
diff --git a/Source/core/dom/MessageChannel.h b/Source/core/dom/LockManager.h |
similarity index 57% |
copy from Source/core/dom/MessageChannel.h |
copy to Source/core/dom/LockManager.h |
index 5b1dc49a04fac99bcb7d28eca14def9f13cbb13a..b4ec53fa55d5a6eebe6a29389db4fa56ae25c018 100644 |
--- a/Source/core/dom/MessageChannel.h |
+++ b/Source/core/dom/LockManager.h |
@@ -1,5 +1,5 @@ |
/* |
- * Copyright (C) 2008 Apple Inc. All Rights Reserved. |
+ * Copyright (C) 2014 Google Inc. All Rights Reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
@@ -24,34 +24,69 @@ |
* |
*/ |
-#ifndef MessageChannel_h |
-#define MessageChannel_h |
+#ifndef LockManager_h |
+#define LockManager_h |
#include "bindings/v8/ScriptWrappable.h" |
+#include "wtf/HashMap.h" |
#include "wtf/PassRefPtr.h" |
#include "wtf/RefCounted.h" |
#include "wtf/RefPtr.h" |
+#include "wtf/ThreadSafeRefCounted.h" |
+#include "wtf/ThreadingPrimitives.h" |
namespace WebCore { |
-class MessagePort; |
class ExecutionContext; |
-class MessageChannel : public RefCounted<MessageChannel>, public ScriptWrappable { |
+class LockInfo; |
+ |
+typedef WTF::HashMap<uint32_t, LockInfo*> LockHashMap; |
+ |
+class LockShard { |
public: |
- static PassRefPtr<MessageChannel> create(ExecutionContext* context) { return adoptRef(new MessageChannel(context)); } |
- ~MessageChannel(); |
+ ~LockShard(); |
+ |
+ LockInfo* get(uint32_t uid); |
+ |
+ Mutex mutex; |
+private: |
+ LockHashMap locks; |
+}; |
+ |
+#define SHARD_BITS 5 |
+#define NUM_SHARDS (1 << SHARD_BITS) |
+#define SHARD_MASK (NUM_SHARDS-1) |
+ |
+class LockManagerImpl FINAL : public ThreadSafeRefCounted<LockManagerImpl> { |
+public: |
+ void lock(uint32_t uid); |
+ void unlock(uint32_t uid); |
+ |
+private: |
+ LockShard shards[NUM_SHARDS]; |
+}; |
+ |
+class LockManager FINAL : public RefCounted<LockManager> |
+ , public ScriptWrappable { |
+public: |
+ static PassRefPtr<LockManager> create(ExecutionContext* context) |
+ { |
+ return adoptRef(new LockManager(context)); |
+ } |
+ |
+ void lock(unsigned long uid); |
+ void unlock(unsigned long uid); |
- MessagePort* port1() const { return m_port1.get(); } |
- MessagePort* port2() const { return m_port2.get(); } |
+ // HACK for performance testing. |
+ void nop(); |
private: |
- explicit MessageChannel(ExecutionContext*); |
+ explicit LockManager(ExecutionContext*); |
- RefPtr<MessagePort> m_port1; |
- RefPtr<MessagePort> m_port2; |
+ RefPtr<LockManagerImpl> impl; |
}; |
} // namespace WebCore |
-#endif // MessageChannel_h |
+#endif // LockManager_h |