| Index: cc/output/context_cache_controller.h
|
| diff --git a/cc/output/context_cache_controller.h b/cc/output/context_cache_controller.h
|
| index 357e5daacb5862f0863492625804ec1e8c7353bc..03f7e2cd74f9117e11cb95ac6db4a747199301f7 100644
|
| --- a/cc/output/context_cache_controller.h
|
| +++ b/cc/output/context_cache_controller.h
|
| @@ -10,13 +10,11 @@
|
|
|
| #include "base/macros.h"
|
| #include "base/memory/ref_counted.h"
|
| -#include "base/memory/weak_ptr.h"
|
| #include "cc/base/cc_export.h"
|
|
|
| class GrContext;
|
|
|
| namespace base {
|
| -class Lock;
|
| class SingleThreadTaskRunner;
|
| }
|
|
|
| @@ -27,26 +25,26 @@
|
| namespace cc {
|
|
|
| // ContextCacheController manages clearing cached data on ContextProvider when
|
| -// appropriate. Currently, cache clearing is triggered when the Context
|
| -// provider transitions from Visible to Not Visible, or from Busy to Idle. As a
|
| -// ContextProvider may have multiple clients, ContextCacheController tracks
|
| -// visibility and idle status across all clients and only cleans up when
|
| -// appropriate.
|
| +// appropriate. Currently, cache clearing happens when the ContextProvider
|
| +// transitions from visible to not visible. As a ContextProvider may have
|
| +// multiple clients, ContextCacheController tracks visibility across all
|
| +// clients and only cleans up when appropriate.
|
| +//
|
| +// Note: Virtuals on this function are for testing only. This function is not
|
| +// designed to have multiple implementations.
|
| class CC_EXPORT ContextCacheController {
|
| public:
|
| - class CC_EXPORT ScopedToken {
|
| + class CC_EXPORT ScopedVisibility {
|
| public:
|
| - ~ScopedToken();
|
| + ~ScopedVisibility();
|
|
|
| private:
|
| friend class ContextCacheController;
|
| - ScopedToken();
|
| + ScopedVisibility();
|
| void Release();
|
|
|
| bool released_ = false;
|
| };
|
| - using ScopedVisibility = ScopedToken;
|
| - using ScopedBusy = ScopedToken;
|
|
|
| ContextCacheController(
|
| gpu::ContextSupport* context_support,
|
| @@ -54,7 +52,6 @@
|
| virtual ~ContextCacheController();
|
|
|
| void SetGrContext(GrContext* gr_context);
|
| - void SetLock(base::Lock* lock);
|
|
|
| // Clients of the owning ContextProvider should call this function when they
|
| // become visible. The returned ScopedVisibility pointer must be passed back
|
| @@ -67,42 +64,17 @@
|
| virtual void ClientBecameNotVisible(
|
| std::unique_ptr<ScopedVisibility> scoped_visibility);
|
|
|
| - // Clients of the owning ContextProvider may call this function when they
|
| - // become busy. The returned ScopedBusy pointer must be passed back
|
| - // to ClientBecameNotBusy or it will DCHECK in its destructor.
|
| - std::unique_ptr<ScopedBusy> ClientBecameBusy();
|
| -
|
| - // When a client becomes not busy, it must pass back any ScopedBusy
|
| - // pointers it owns via this function.
|
| - void ClientBecameNotBusy(std::unique_ptr<ScopedBusy> scoped_busy);
|
| + protected:
|
| + std::unique_ptr<ScopedVisibility> CreateScopedVisibilityForTesting() const;
|
| + void ReleaseScopedVisibilityForTesting(
|
| + std::unique_ptr<ScopedVisibility> scoped_visibility) const;
|
|
|
| private:
|
| - void OnIdle(uint32_t idle_generation);
|
| - void PostIdleCallback(uint32_t current_idle_generation) const;
|
| - void InvalidatePendingIdleCallbacks();
|
| -
|
| gpu::ContextSupport* context_support_;
|
| scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
|
| GrContext* gr_context_ = nullptr;
|
|
|
| - // If set, |context_lock_| must be held before accessing any member within
|
| - // the idle callback. Exceptions to this are |current_idle_generation_|,
|
| - // which has its own lock, and weak_ptr_ and task_runner_, which may be
|
| - // accessed from multiple threads without locking.
|
| - base::Lock* context_lock_ = nullptr;
|
| -
|
| uint32_t num_clients_visible_ = 0;
|
| - uint32_t num_clients_busy_ = 0;
|
| - bool callback_pending_ = false;
|
| -
|
| - // |current_idle_generation_lock_| must be held when accessing
|
| - // |current_idle_generation_|. |current_idle_generation_lock_| must never be
|
| - // held while acquiring |context_lock_|.
|
| - base::Lock current_idle_generation_lock_;
|
| - uint32_t current_idle_generation_ = 0;
|
| -
|
| - base::WeakPtr<ContextCacheController> weak_ptr_;
|
| - base::WeakPtrFactory<ContextCacheController> weak_factory_;
|
| };
|
|
|
| } // namespace cc
|
|
|