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

Unified Diff: third_party/WebKit/Source/platform/scheduler/base/delayed_switch.cc

Issue 2383473002: [scheduler] Teach scheduler about audio state (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
Index: third_party/WebKit/Source/platform/scheduler/base/delayed_switch.cc
diff --git a/third_party/WebKit/Source/platform/scheduler/base/delayed_switch.cc b/third_party/WebKit/Source/platform/scheduler/base/delayed_switch.cc
new file mode 100644
index 0000000000000000000000000000000000000000..a6dcb557c704cdbb99f2cbea4c959838f0cc4326
--- /dev/null
+++ b/third_party/WebKit/Source/platform/scheduler/base/delayed_switch.cc
@@ -0,0 +1,69 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "platform/scheduler/base/delayed_switch.h"
+
+#include "base/task_runner.h"
+
+namespace blink {
+namespace scheduler {
+
+DelayedSwitch::DelayedSwitch(
+ base::TaskRunner* task_runner,
+ base::TimeDelta disable_delay,
+ base::Closure enable_callback,
+ base::Closure disable_callback)
+ : state_(State::DISABLED),
+ task_runner_(task_runner),
+ disable_delay_(disable_delay),
+ enable_callback_(enable_callback),
+ disable_callback_(disable_callback),
+ has_disable_task_queued_(false),
+ weak_ptr_factory_(this) {
+ delayed_disable_task_.Reset(base::Bind(
+ &DelayedSwitch::DoDisable, weak_ptr_factory_.GetWeakPtr()));
+}
+
+DelayedSwitch::~DelayedSwitch() {}
+
+void DelayedSwitch::Enable() {
+ // Cancel queued call to |disable_callback|.
+ delayed_disable_task_.Cancel();
alex clarke (OOO till 29th) 2016/09/29 11:16:53 DCHECK(task_runner_->RunsTasksOnCurrentThread());
altimin 2016/09/29 16:29:42 Acknowledged.
+ has_disable_task_queued_ = false;
+
+ if (state_ == State::ENABLED)
+ return;
+
+ state_ = State::ENABLED;
+
+ enable_callback_.Run();
+}
+
+void DelayedSwitch::Disable() {
+ if (state_ == State::DISABLED)
alex clarke (OOO till 29th) 2016/09/29 11:16:53 DCHECK(task_runner_->RunsTasksOnCurrentThread());
altimin 2016/09/29 16:29:42 Acknowledged.
+ return;
+
+ if (has_disable_task_queued_)
+ return;
+
+ task_runner_->PostDelayedTask(
+ FROM_HERE, delayed_disable_task_.callback(), disable_delay_);
+ has_disable_task_queued_ = true;
+}
+
+bool DelayedSwitch::IsEnabled() const {
+ return state_ == State::ENABLED;
alex clarke (OOO till 29th) 2016/09/29 11:16:53 DCHECK(task_runner_->RunsTasksOnCurrentThread());
altimin 2016/09/29 16:29:42 Acknowledged.
+}
+
+void DelayedSwitch::DoDisable() {
+ has_disable_task_queued_ = false;
+
+ DCHECK_EQ(State::ENABLED, state_);
Sami 2016/09/29 13:36:07 Does this work? If so, please mark https://bugs.ch
altimin 2016/09/29 16:29:42 Done.
+ state_ = State::DISABLED;
+
+ disable_callback_.Run();
+}
+
+} // namespace scheduler
+} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698