Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2762)

Unified Diff: cc/output/context_cache_controller.cc

Issue 2382443012: Revert of Idle cleanup for worker context (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/output/context_cache_controller.h ('k') | cc/output/context_cache_controller_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/output/context_cache_controller.cc
diff --git a/cc/output/context_cache_controller.cc b/cc/output/context_cache_controller.cc
index 7401629e37caf32adc5537af6fcfd5558e9a8aef..218059dd1780531bd90debf3b0f8884b5a92cb6a 100644
--- a/cc/output/context_cache_controller.cc
+++ b/cc/output/context_cache_controller.cc
@@ -4,26 +4,20 @@
#include "cc/output/context_cache_controller.h"
-#include "base/bind.h"
#include "base/logging.h"
#include "base/memory/ptr_util.h"
#include "base/single_thread_task_runner.h"
-#include "base/synchronization/lock.h"
#include "gpu/command_buffer/client/context_support.h"
#include "third_party/skia/include/gpu/GrContext.h"
namespace cc {
-namespace {
-static const int kIdleCleanupDelaySeconds = 1;
-} // namespace
+ContextCacheController::ScopedVisibility::ScopedVisibility() = default;
-ContextCacheController::ScopedToken::ScopedToken() = default;
-
-ContextCacheController::ScopedToken::~ScopedToken() {
+ContextCacheController::ScopedVisibility::~ScopedVisibility() {
DCHECK(released_);
}
-void ContextCacheController::ScopedToken::Release() {
+void ContextCacheController::ScopedVisibility::Release() {
DCHECK(!released_);
released_ = true;
}
@@ -31,16 +25,7 @@
ContextCacheController::ContextCacheController(
gpu::ContextSupport* context_support,
scoped_refptr<base::SingleThreadTaskRunner> task_runner)
- : context_support_(context_support),
- task_runner_(std::move(task_runner)),
- weak_factory_(this) {
- // The |weak_factory_| can only be used from a single thread. We
- // create/destroy this class and run callbacks on a single thread, but we
- // want to be able to post callbacks from multiple threads. We need a weak
- // ptr to post callbacks, so acquire one here, while we're on the right
- // thread.
- weak_ptr_ = weak_factory_.GetWeakPtr();
-}
+ : context_support_(context_support), task_runner_(std::move(task_runner)) {}
ContextCacheController::~ContextCacheController() = default;
@@ -48,15 +33,8 @@
gr_context_ = gr_context;
}
-void ContextCacheController::SetLock(base::Lock* lock) {
- context_lock_ = lock;
-}
-
std::unique_ptr<ContextCacheController::ScopedVisibility>
ContextCacheController::ClientBecameVisible() {
- if (context_lock_)
- context_lock_->AssertAcquired();
-
bool became_visible = num_clients_visible_ == 0;
++num_clients_visible_;
@@ -71,105 +49,24 @@
DCHECK(scoped_visibility);
scoped_visibility->Release();
- if (context_lock_)
- context_lock_->AssertAcquired();
-
DCHECK_GT(num_clients_visible_, 0u);
--num_clients_visible_;
if (num_clients_visible_ == 0) {
- // We are freeing resources now - cancel any pending idle callbacks.
- InvalidatePendingIdleCallbacks();
-
if (gr_context_)
gr_context_->freeGpuResources();
context_support_->SetAggressivelyFreeResources(true);
}
}
-std::unique_ptr<ContextCacheController::ScopedBusy>
-ContextCacheController::ClientBecameBusy() {
- if (context_lock_)
- context_lock_->AssertAcquired();
-
- ++num_clients_busy_;
- // We are busy, cancel any pending idle callbacks.
- InvalidatePendingIdleCallbacks();
-
- return base::WrapUnique(new ScopedBusy());
+std::unique_ptr<ContextCacheController::ScopedVisibility>
+ContextCacheController::CreateScopedVisibilityForTesting() const {
+ return base::WrapUnique(new ScopedVisibility());
}
-void ContextCacheController::ClientBecameNotBusy(
- std::unique_ptr<ScopedBusy> scoped_busy) {
- DCHECK(scoped_busy);
- scoped_busy->Release();
-
- if (context_lock_)
- context_lock_->AssertAcquired();
-
- DCHECK_GT(num_clients_busy_, 0u);
- --num_clients_busy_;
-
- // If we have become idle and we are visible, queue a task to drop resources
- // after a delay. If are not visible, we have already dropped resources.
- if (num_clients_busy_ == 0 && num_clients_visible_ > 0 && task_runner_) {
- // If we already have a callback pending, don't post a new one. The pending
- // callback will handle posting a new callback itself. This prevents us from
- // flooding the system with tasks.
- if (!callback_pending_) {
- {
- base::AutoLock hold(current_idle_generation_lock_);
- PostIdleCallback(current_idle_generation_);
- }
- callback_pending_ = true;
- }
- }
-}
-
-void ContextCacheController::PostIdleCallback(
- uint32_t current_idle_generation) const {
- task_runner_->PostDelayedTask(
- FROM_HERE, base::Bind(&ContextCacheController::OnIdle, weak_ptr_,
- current_idle_generation),
- base::TimeDelta::FromSeconds(kIdleCleanupDelaySeconds));
-}
-
-void ContextCacheController::InvalidatePendingIdleCallbacks() {
- base::AutoLock hold(current_idle_generation_lock_);
- ++current_idle_generation_;
-}
-
-void ContextCacheController::OnIdle(uint32_t idle_generation) {
- // First check if we should run our idle callback at all. If we have become
- // busy since scheduling, just schedule another idle callback and return.
- {
- base::AutoLock hold(current_idle_generation_lock_);
- if (current_idle_generation_ != idle_generation) {
- PostIdleCallback(current_idle_generation_);
- return;
- }
- }
-
- // Try to acquire the context lock - if we can't acquire it then we've become
- // busy since checking |current_idle_generation_| above. In this case, just
- // re-post our idle callback and return.
- if (context_lock_ && !context_lock_->Try()) {
- base::AutoLock hold(current_idle_generation_lock_);
- PostIdleCallback(current_idle_generation_);
- return;
- }
-
- if (gr_context_)
- gr_context_->freeGpuResources();
-
- // Toggle SetAggressivelyFreeResources to drop command buffer data.
- context_support_->SetAggressivelyFreeResources(true);
- context_support_->SetAggressivelyFreeResources(false);
-
- callback_pending_ = false;
-
- if (context_lock_)
- context_lock_->Release();
+void ContextCacheController::ReleaseScopedVisibilityForTesting(
+ std::unique_ptr<ScopedVisibility> scoped_visibility) const {
+ scoped_visibility->Release();
}
} // namespace cc
« no previous file with comments | « cc/output/context_cache_controller.h ('k') | cc/output/context_cache_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698