Index: cc/output/context_provider.h |
diff --git a/cc/output/context_provider.h b/cc/output/context_provider.h |
index aa4367d97ff68d515b22121b7cb89b25fba4ad57..bfc1d4f5cf640e25fc1e8e489300b8a283896cc0 100644 |
--- a/cc/output/context_provider.h |
+++ b/cc/output/context_provider.h |
@@ -7,6 +7,7 @@ |
#include "base/callback.h" |
#include "base/memory/ref_counted.h" |
+#include "base/synchronization/lock.h" |
#include "cc/base/cc_export.h" |
#include "gpu/command_buffer/common/capabilities.h" |
@@ -26,6 +27,27 @@ struct ManagedMemoryPolicy; |
class ContextProvider : public base::RefCountedThreadSafe<ContextProvider> { |
public: |
+ class ScopedContextGL { |
piman
2015/07/23 20:44:52
nit: I like this class but kinda hate the name. Ma
reveman
2015/07/24 17:49:15
Changed the name to ScopedContextLock.
|
+ public: |
+ explicit ScopedContextGL(ContextProvider* context_provider) |
+ : context_provider_(context_provider), |
+ context_lock_(*context_provider_->GetLock()) { |
+ // Allow current thread to bind to |context_provider|. |
+ context_provider_->DetachFromThread(); |
+ } |
+ ~ScopedContextGL() { |
+ // Allow a different thread to bind to |context_provider|. |
+ context_provider_->DetachFromThread(); |
+ } |
+ |
+ gpu::gles2::GLES2Interface* ContextGL() { |
+ return context_provider_->ContextGL(); |
+ } |
+ |
+ private: |
+ ContextProvider* const context_provider_; |
+ base::AutoLock context_lock_; |
+ }; |
// Bind the 3d context to the current thread. This should be called before |
// accessing the contexts. Calling it more than once should have no effect. |
// Once this function has been called, the class should only be accessed |