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

Side by Side Diff: webkit/media/buffered_resource_loader.cc

Issue 10694138: Collapse Should{Enable,Disable}Defer() into ShouldDefer() + simplify some other code. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src
Patch Set: rebase Created 8 years, 5 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « webkit/media/buffered_resource_loader.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "webkit/media/buffered_resource_loader.h" 5 #include "webkit/media/buffered_resource_loader.h"
6 6
7 #include "base/bits.h" 7 #include "base/bits.h"
8 #include "base/callback_helpers.h" 8 #include "base/callback_helpers.h"
9 #include "base/format_macros.h" 9 #include "base/format_macros.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 // capacity. 292 // capacity.
293 // 293 //
294 // This can happen when reading in a large seek index or when the 294 // This can happen when reading in a large seek index or when the
295 // first byte of a read request falls within kForwardWaitThreshold. 295 // first byte of a read request falls within kForwardWaitThreshold.
296 if (last_offset_ > buffer_.forward_capacity()) { 296 if (last_offset_ > buffer_.forward_capacity()) {
297 saved_forward_capacity_ = buffer_.forward_capacity(); 297 saved_forward_capacity_ = buffer_.forward_capacity();
298 buffer_.set_forward_capacity(last_offset_); 298 buffer_.set_forward_capacity(last_offset_);
299 } 299 }
300 300
301 // Make sure we stop deferring now that there's additional capacity. 301 // Make sure we stop deferring now that there's additional capacity.
302 if (active_loader_->deferred()) 302 DCHECK(!ShouldDefer())
303 SetDeferred(false);
304
305 DCHECK(!ShouldEnableDefer())
306 << "Capacity was not adjusted properly to prevent deferring."; 303 << "Capacity was not adjusted properly to prevent deferring.";
304 UpdateDeferBehavior();
307 305
308 return; 306 return;
309 } 307 }
310 308
311 // Make a callback to report failure. 309 // Make a callback to report failure.
312 DoneRead(kCacheMiss, 0); 310 DoneRead(kCacheMiss, 0);
313 } 311 }
314 312
315 int64 BufferedResourceLoader::content_length() { 313 int64 BufferedResourceLoader::content_length() {
316 return content_length_; 314 return content_length_;
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 // than the current capacities; the new limits will be enforced after the 597 // than the current capacities; the new limits will be enforced after the
600 // existing excess buffered data is consumed. 598 // existing excess buffered data is consumed.
601 buffer_.set_backward_capacity(backward_capacity); 599 buffer_.set_backward_capacity(backward_capacity);
602 buffer_.set_forward_capacity(forward_capacity); 600 buffer_.set_forward_capacity(forward_capacity);
603 } 601 }
604 602
605 void BufferedResourceLoader::UpdateDeferBehavior() { 603 void BufferedResourceLoader::UpdateDeferBehavior() {
606 if (!active_loader_.get()) 604 if (!active_loader_.get())
607 return; 605 return;
608 606
609 // If necessary, toggle defer state and continue/pause downloading data 607 SetDeferred(ShouldDefer());
610 // accordingly.
611 if (ShouldEnableDefer() || ShouldDisableDefer())
612 SetDeferred(!active_loader_->deferred());
613 } 608 }
614 609
615 void BufferedResourceLoader::SetDeferred(bool deferred) { 610 void BufferedResourceLoader::SetDeferred(bool deferred) {
611 if (active_loader_->deferred() == deferred)
612 return;
613
616 active_loader_->SetDeferred(deferred); 614 active_loader_->SetDeferred(deferred);
617 loading_cb_.Run(deferred ? kLoadingDeferred : kLoading); 615 loading_cb_.Run(deferred ? kLoadingDeferred : kLoading);
618 } 616 }
619 617
620 bool BufferedResourceLoader::ShouldEnableDefer() const { 618 bool BufferedResourceLoader::ShouldDefer() const {
621 // If we're already deferring, then enabling makes no sense.
622 if (active_loader_->deferred())
623 return false;
624
625 switch(defer_strategy_) { 619 switch(defer_strategy_) {
626 // Never defer at all, so never enable defer.
627 case kNeverDefer: 620 case kNeverDefer:
628 return false; 621 return false;
629 622
630 // Defer if nothing is being requested.
631 case kReadThenDefer: 623 case kReadThenDefer:
624 DCHECK(read_cb_.is_null() || last_offset_ > buffer_.forward_bytes())
625 << "We shouldn't stop deferring if we can fulfill the read";
632 return read_cb_.is_null(); 626 return read_cb_.is_null();
633 627
634 // Defer if we've reached max capacity.
635 case kCapacityDefer: 628 case kCapacityDefer:
636 return buffer_.forward_bytes() >= buffer_.forward_capacity(); 629 return buffer_.forward_bytes() >= buffer_.forward_capacity();
637 } 630 }
638 // Otherwise don't enable defer. 631 NOTREACHED();
639 return false; 632 return false;
640 } 633 }
641 634
642 bool BufferedResourceLoader::ShouldDisableDefer() const {
643 // If we're not deferring, then disabling makes no sense.
644 if (!active_loader_->deferred())
645 return false;
646
647 switch(defer_strategy_) {
648 // Always disable deferring.
649 case kNeverDefer:
650 return true;
651
652 // We have an outstanding read request, and we have not buffered enough
653 // yet to fulfill the request; disable defer to get more data.
654 case kReadThenDefer:
655 return !read_cb_.is_null() && last_offset_ > buffer_.forward_bytes();
656
657 // Disable deferring whenever our forward-buffered amount falls beneath our
658 // capacity.
659 case kCapacityDefer:
660 return buffer_.forward_bytes() < buffer_.forward_capacity();
661 }
662
663 // Otherwise keep deferring.
664 return false;
665 }
666
667 bool BufferedResourceLoader::CanFulfillRead() const { 635 bool BufferedResourceLoader::CanFulfillRead() const {
668 // If we are reading too far in the backward direction. 636 // If we are reading too far in the backward direction.
669 if (first_offset_ < 0 && (first_offset_ + buffer_.backward_bytes()) < 0) 637 if (first_offset_ < 0 && (first_offset_ + buffer_.backward_bytes()) < 0)
670 return false; 638 return false;
671 639
672 // If the start offset is too far ahead. 640 // If the start offset is too far ahead.
673 if (first_offset_ >= buffer_.forward_bytes()) 641 if (first_offset_ >= buffer_.forward_bytes())
674 return false; 642 return false;
675 643
676 // At the point, we verified that first byte requested is within the buffer. 644 // At the point, we verified that first byte requested is within the buffer.
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
831 799
832 void BufferedResourceLoader::Log() { 800 void BufferedResourceLoader::Log() {
833 media_log_->AddEvent( 801 media_log_->AddEvent(
834 media_log_->CreateBufferedExtentsChangedEvent( 802 media_log_->CreateBufferedExtentsChangedEvent(
835 offset_ - buffer_.backward_bytes(), 803 offset_ - buffer_.backward_bytes(),
836 offset_, 804 offset_,
837 offset_ + buffer_.forward_bytes())); 805 offset_ + buffer_.forward_bytes()));
838 } 806 }
839 807
840 } // namespace webkit_media 808 } // namespace webkit_media
OLDNEW
« no previous file with comments | « webkit/media/buffered_resource_loader.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698