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

Unified Diff: webkit/glue/media/defer_strategy.cc

Issue 6625059: Implementing preload=metadata for video (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Cleanup defer strategy, fix logic bug Created 9 years, 9 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: webkit/glue/media/defer_strategy.cc
diff --git a/webkit/glue/media/defer_strategy.cc b/webkit/glue/media/defer_strategy.cc
new file mode 100644
index 0000000000000000000000000000000000000000..473763c8648dd9100532707f93cbbf03b42d910c
--- /dev/null
+++ b/webkit/glue/media/defer_strategy.cc
@@ -0,0 +1,91 @@
+// Copyright (c) 2011 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 "webkit/glue/media/defer_strategy.h"
+
+#include "webkit/glue/media/buffered_resource_loader.h"
+
+namespace webkit_glue {
+
+bool DeferStrategy::ToggleDefer(BufferedResourceLoader* loader)
+{
+ DCHECK(loader);
+ bool deferSetting = !loader->deferred_;
+ loader->deferred_ = deferSetting;
+ if (loader->url_loader_.get()) {
+ loader->url_loader_->setDefersLoading(deferSetting);
+ return true;
+ }
+ return false;
acolwell GONE FROM CHROMIUM 2011/03/25 04:35:28 Shouldn't this a method in BufferedResourceLoader?
vrk (LEFT CHROMIUM) 2011/03/25 21:33:32 lol yeah, oops. Fixed/NA anymore! :)
+}
+
+NeverDeferStrategy* NeverDeferStrategy::GetInstance() {
+ return Singleton<NeverDeferStrategy>::get();
+}
+
+bool NeverDeferStrategy::EnableDeferIfNeeded(
+ BufferedResourceLoader* loader) const {
+ return false;
+}
+
+bool NeverDeferStrategy::DisableDeferIfNeeded(
+ BufferedResourceLoader* loader) const {
+ DCHECK(loader);
+ if (loader->deferred_)
+ return ToggleDefer(loader);
+ return false;
+}
+
+ThresholdDeferStrategy* ThresholdDeferStrategy::GetInstance() {
+ return Singleton<ThresholdDeferStrategy>::get();
+}
+
+bool ThresholdDeferStrategy::EnableDeferIfNeeded(
+ BufferedResourceLoader* loader) const {
+ DCHECK(loader);
+ if (!loader->deferred_ &&
+ loader->buffer_->forward_bytes() >= loader->buffer_->forward_capacity()) {
+ return ToggleDefer(loader);
+ }
+ return false;
+}
+
+bool ThresholdDeferStrategy::DisableDeferIfNeeded(
+ BufferedResourceLoader* loader) const {
+ DCHECK(loader);
+ DCHECK(loader->buffer_.get());
+ size_t amount_buffered = loader->buffer_->forward_bytes();
+ size_t half_capacity = loader->buffer_->forward_capacity() / 2;
+ if (loader->deferred_ && amount_buffered < half_capacity)
+ return ToggleDefer(loader);
+ return false;
+}
+
+ReadThenDeferStrategy* ReadThenDeferStrategy::GetInstance() {
+ return Singleton<ReadThenDeferStrategy>::get();
+}
+
+bool ReadThenDeferStrategy::EnableDeferIfNeeded(
+ BufferedResourceLoader* loader) const {
+ DCHECK(loader);
+ if (!loader->deferred_ && !loader->read_callback_.get())
+ return ToggleDefer(loader);
+ return false;
+}
+
+bool ReadThenDeferStrategy::DisableDeferIfNeeded(
+ BufferedResourceLoader* loader) const {
+ DCHECK(loader);
+ DCHECK(loader->buffer_.get());
+ size_t amount_buffered = loader->buffer_->forward_bytes();
+ size_t amount_to_read = static_cast<size_t>(loader->read_size_);
+
+ if (loader->deferred_ && loader->read_callback_.get() &&
+ amount_buffered < amount_to_read) {
+ return ToggleDefer(loader);
+ }
+ return false;
+}
+
+};

Powered by Google App Engine
This is Rietveld 408576698