Home | History | Annotate | Download | only in test
      1 // Copyright 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_TEST_TEST_CONTEXT_PROVIDER_H_
      6 #define CC_TEST_TEST_CONTEXT_PROVIDER_H_
      7 
      8 #include "base/callback.h"
      9 #include "base/memory/scoped_ptr.h"
     10 #include "base/memory/weak_ptr.h"
     11 #include "base/synchronization/lock.h"
     12 #include "base/threading/thread_checker.h"
     13 #include "cc/output/context_provider.h"
     14 #include "cc/test/test_context_support.h"
     15 #include "gpu/command_buffer/client/gles2_interface_stub.h"
     16 
     17 namespace cc {
     18 class TestWebGraphicsContext3D;
     19 class TestGLES2Interface;
     20 
     21 class TestContextProvider : public ContextProvider {
     22  public:
     23   typedef base::Callback<scoped_ptr<TestWebGraphicsContext3D>(void)>
     24     CreateCallback;
     25 
     26   static scoped_refptr<TestContextProvider> Create();
     27   static scoped_refptr<TestContextProvider> Create(
     28       scoped_ptr<TestWebGraphicsContext3D> context);
     29 
     30   virtual bool BindToCurrentThread() OVERRIDE;
     31   virtual Capabilities ContextCapabilities() OVERRIDE;
     32   virtual gpu::gles2::GLES2Interface* ContextGL() OVERRIDE;
     33   virtual gpu::ContextSupport* ContextSupport() OVERRIDE;
     34   virtual class GrContext* GrContext() OVERRIDE;
     35   virtual bool IsContextLost() OVERRIDE;
     36   virtual void VerifyContexts() OVERRIDE;
     37   virtual void DeleteCachedResources() OVERRIDE;
     38   virtual bool DestroyedOnMainThread() OVERRIDE;
     39   virtual void SetLostContextCallback(const LostContextCallback& cb) OVERRIDE;
     40   virtual void SetMemoryPolicyChangedCallback(
     41       const MemoryPolicyChangedCallback& cb) OVERRIDE;
     42 
     43   TestWebGraphicsContext3D* TestContext3d();
     44 
     45   // This returns the TestWebGraphicsContext3D but is valid to call
     46   // before the context is bound to a thread. This is needed to set up
     47   // state on the test context before binding. Don't call
     48   // makeContextCurrent on the context returned from this method.
     49   TestWebGraphicsContext3D* UnboundTestContext3d();
     50 
     51   TestContextSupport* support() { return &support_; }
     52 
     53   void SetMemoryAllocation(const ManagedMemoryPolicy& policy);
     54 
     55   void SetMaxTransferBufferUsageBytes(size_t max_transfer_buffer_usage_bytes);
     56 
     57  protected:
     58   explicit TestContextProvider(scoped_ptr<TestWebGraphicsContext3D> context);
     59   virtual ~TestContextProvider();
     60 
     61  private:
     62   void OnLostContext();
     63 
     64   TestContextSupport support_;
     65 
     66   scoped_ptr<TestWebGraphicsContext3D> context3d_;
     67   scoped_ptr<TestGLES2Interface> context_gl_;
     68   bool bound_;
     69 
     70   base::ThreadChecker main_thread_checker_;
     71   base::ThreadChecker context_thread_checker_;
     72 
     73   base::Lock destroyed_lock_;
     74   bool destroyed_;
     75 
     76   LostContextCallback lost_context_callback_;
     77   MemoryPolicyChangedCallback memory_policy_changed_callback_;
     78 
     79   base::WeakPtrFactory<TestContextProvider> weak_ptr_factory_;
     80 
     81   DISALLOW_COPY_AND_ASSIGN(TestContextProvider);
     82 };
     83 
     84 }  // namespace cc
     85 
     86 #endif  // CC_TEST_TEST_CONTEXT_PROVIDER_H_
     87 
     88