1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CC_OUTPUT_CONTEXT_PROVIDER_H_ 6 #define CC_OUTPUT_CONTEXT_PROVIDER_H_ 7 8 #include "base/callback.h" 9 #include "base/memory/ref_counted.h" 10 11 class GrContext; 12 namespace WebKit { class WebGraphicsContext3D; } 13 14 namespace cc { 15 16 class ContextProvider : public base::RefCountedThreadSafe<ContextProvider> { 17 public: 18 // Bind the 3d context to the current thread. This should be called before 19 // accessing the contexts. Calling it more than once should have no effect. 20 // Once this function has been called, the class should only be accessed 21 // from the same thread. 22 virtual bool BindToCurrentThread() = 0; 23 24 virtual WebKit::WebGraphicsContext3D* Context3d() = 0; 25 virtual class GrContext* GrContext() = 0; 26 27 // Ask the provider to check if the contexts are valid or lost. If they are, 28 // this should invalidate the provider so that it can be replaced with a new 29 // one. 30 virtual void VerifyContexts() = 0; 31 32 // A method to be called from the main thread that should return true if 33 // the context inside the provider is no longer valid. 34 virtual bool DestroyedOnMainThread() = 0; 35 36 // Sets a callback to be called when the context is lost. This should be 37 // called from the same thread that the context is bound to. To avoid races, 38 // it should be called before BindToCurrentThread(), or VerifyContexts() 39 // should be called after setting the callback. 40 typedef base::Closure LostContextCallback; 41 virtual void SetLostContextCallback( 42 const LostContextCallback& lost_context_callback) = 0; 43 44 protected: 45 friend class base::RefCountedThreadSafe<ContextProvider>; 46 virtual ~ContextProvider() {} 47 }; 48 49 } // namespace cc 50 51 #endif // CC_OUTPUT_CONTEXT_PROVIDER_H_ 52