| Index: cc/test/test_context_support.cc | 
| diff --git a/cc/test/test_context_support.cc b/cc/test/test_context_support.cc | 
| index 7a47780e4d56369ffc6519477a2c33ff643616f3..d3ec892fc5b48ad7ffe76a5044064de916039031 100644 | 
| --- a/cc/test/test_context_support.cc | 
| +++ b/cc/test/test_context_support.cc | 
| @@ -9,13 +9,32 @@ | 
|  | 
| #include "base/bind.h" | 
| #include "base/location.h" | 
| +#include "base/memory/ptr_util.h" | 
| #include "base/single_thread_task_runner.h" | 
| #include "base/threading/thread_task_runner_handle.h" | 
|  | 
| namespace cc { | 
| +namespace { | 
| + | 
| +// Class that DCHECKs if it is destructed without first having Release called. | 
| +class ScopedVisibilityImpl : public gpu::ContextSupport::ScopedVisibility { | 
| + public: | 
| +  explicit ScopedVisibilityImpl(gpu::ContextSupport* context_support) | 
| +      : initial_context_support_(context_support) {} | 
| +  ~ScopedVisibilityImpl() { DCHECK(!initial_context_support_); } | 
| + | 
| +  void Release(gpu::ContextSupport* context_support) { | 
| +    DCHECK_EQ(initial_context_support_, context_support); | 
| +    initial_context_support_ = nullptr; | 
| +  } | 
| + | 
| + private: | 
| +  const gpu::ContextSupport* initial_context_support_; | 
| +}; | 
|  | 
| -TestContextSupport::TestContextSupport() | 
| -    : out_of_order_callbacks_(false), weak_ptr_factory_(this) {} | 
| +}  // namespace | 
| + | 
| +TestContextSupport::TestContextSupport() : weak_ptr_factory_(this) {} | 
|  | 
| TestContextSupport::~TestContextSupport() {} | 
|  | 
| @@ -35,9 +54,7 @@ void TestContextSupport::SignalQuery(uint32_t query, | 
| weak_ptr_factory_.GetWeakPtr())); | 
| } | 
|  | 
| -void TestContextSupport::SetAggressivelyFreeResources( | 
| -    bool aggressively_free_resources) { | 
| -} | 
| +void TestContextSupport::TrimResources() {} | 
|  | 
| void TestContextSupport::CallAllSyncPointCallbacks() { | 
| size_t size = sync_point_callbacks_.size(); | 
| @@ -91,18 +108,22 @@ uint64_t TestContextSupport::ShareGroupTracingGUID() const { | 
| void TestContextSupport::SetErrorMessageCallback( | 
| const base::Callback<void(const char*, int32_t)>& callback) {} | 
|  | 
| -void TestContextSupport::SetClientVisible(int client_id, bool is_visible) { | 
| -  if (is_visible) { | 
| -    visible_clients_.insert(client_id); | 
| -  } else { | 
| -    auto found = visible_clients_.find(client_id); | 
| -    if (found != visible_clients_.end()) | 
| -      visible_clients_.erase(found); | 
| -  } | 
| +std::unique_ptr<gpu::ContextSupport::ScopedVisibility> | 
| +TestContextSupport::ClientBecameVisible() { | 
| +  ++num_visible_clients_; | 
| +  return base::MakeUnique<ScopedVisibilityImpl>(this); | 
| +} | 
| + | 
| +void TestContextSupport::ClientBecameNotVisible( | 
| +    std::unique_ptr<ScopedVisibility> visibility) { | 
| +  DCHECK(visibility); | 
| +  DCHECK_GT(num_visible_clients_, 0u); | 
| +  --num_visible_clients_; | 
| +  static_cast<ScopedVisibilityImpl*>(visibility.get())->Release(this); | 
| } | 
|  | 
| bool TestContextSupport::AnyClientsVisible() const { | 
| -  return !visible_clients_.empty(); | 
| +  return num_visible_clients_ > 0; | 
| } | 
|  | 
| }  // namespace cc | 
|  |