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

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

Issue 1029763002: Introduce CancelUponDeferral() to buffered media loaders. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Move cancelation. Created 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "media/blink/buffered_resource_loader.h" 5 #include "media/blink/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/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 offset_(0), 117 offset_(0),
118 content_length_(kPositionNotSpecified), 118 content_length_(kPositionNotSpecified),
119 instance_size_(kPositionNotSpecified), 119 instance_size_(kPositionNotSpecified),
120 read_position_(0), 120 read_position_(0),
121 read_size_(0), 121 read_size_(0),
122 read_buffer_(NULL), 122 read_buffer_(NULL),
123 first_offset_(0), 123 first_offset_(0),
124 last_offset_(0), 124 last_offset_(0),
125 bitrate_(bitrate), 125 bitrate_(bitrate),
126 playback_rate_(playback_rate), 126 playback_rate_(playback_rate),
127 media_log_(media_log) { 127 media_log_(media_log),
128 cancel_upon_deferral_(false) {
128 129
129 // Set the initial capacity of |buffer_| based on |bitrate_| and 130 // Set the initial capacity of |buffer_| based on |bitrate_| and
130 // |playback_rate_|. 131 // |playback_rate_|.
131 UpdateBufferWindow(); 132 UpdateBufferWindow();
132 } 133 }
133 134
134 BufferedResourceLoader::~BufferedResourceLoader() {} 135 BufferedResourceLoader::~BufferedResourceLoader() {}
135 136
136 void BufferedResourceLoader::Start( 137 void BufferedResourceLoader::Start(
137 const StartCB& start_cb, 138 const StartCB& start_cb,
(...skipping 428 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 void BufferedResourceLoader::UpdateDeferStrategy(DeferStrategy strategy) { 567 void BufferedResourceLoader::UpdateDeferStrategy(DeferStrategy strategy) {
567 if (!might_be_reused_from_cache_in_future_ && strategy == kNeverDefer) 568 if (!might_be_reused_from_cache_in_future_ && strategy == kNeverDefer)
568 strategy = kCapacityDefer; 569 strategy = kCapacityDefer;
569 defer_strategy_ = strategy; 570 defer_strategy_ = strategy;
570 UpdateDeferBehavior(); 571 UpdateDeferBehavior();
571 } 572 }
572 573
573 void BufferedResourceLoader::SetPlaybackRate(float playback_rate) { 574 void BufferedResourceLoader::SetPlaybackRate(float playback_rate) {
574 playback_rate_ = playback_rate; 575 playback_rate_ = playback_rate;
575 576
577 // Abort any cancellations in progress if playback starts.
578 if (playback_rate_ > 0 && cancel_upon_deferral_)
579 cancel_upon_deferral_ = false;
xhwang 2015/03/26 07:21:55 Move this block to l.585?
DaleCurtis 2015/03/26 17:22:00 Done.
580
576 // This is a pause so don't bother updating the buffer window as we'll likely 581 // This is a pause so don't bother updating the buffer window as we'll likely
577 // get unpaused in the future. 582 // get unpaused in the future.
578 if (playback_rate_ == 0.0) 583 if (playback_rate_ == 0.0)
579 return; 584 return;
580 585
581 UpdateBufferWindow(); 586 UpdateBufferWindow();
582 } 587 }
583 588
584 void BufferedResourceLoader::SetBitrate(int bitrate) { 589 void BufferedResourceLoader::SetBitrate(int bitrate) {
585 DCHECK(bitrate >= 0); 590 DCHECK(bitrate >= 0);
(...skipping 23 matching lines...) Expand all
609 614
610 SetDeferred(ShouldDefer()); 615 SetDeferred(ShouldDefer());
611 } 616 }
612 617
613 void BufferedResourceLoader::SetDeferred(bool deferred) { 618 void BufferedResourceLoader::SetDeferred(bool deferred) {
614 if (active_loader_->deferred() == deferred) 619 if (active_loader_->deferred() == deferred)
615 return; 620 return;
616 621
617 active_loader_->SetDeferred(deferred); 622 active_loader_->SetDeferred(deferred);
618 loading_cb_.Run(deferred ? kLoadingDeferred : kLoading); 623 loading_cb_.Run(deferred ? kLoadingDeferred : kLoading);
624
625 if (deferred && cancel_upon_deferral_)
626 CancelUponDeferral();
619 } 627 }
620 628
621 bool BufferedResourceLoader::ShouldDefer() const { 629 bool BufferedResourceLoader::ShouldDefer() const {
622 switch(defer_strategy_) { 630 switch(defer_strategy_) {
623 case kNeverDefer: 631 case kNeverDefer:
624 return false; 632 return false;
625 633
626 case kReadThenDefer: 634 case kReadThenDefer:
627 DCHECK(read_cb_.is_null() || last_offset_ > buffer_.forward_bytes()) 635 DCHECK(read_cb_.is_null() || last_offset_ > buffer_.forward_bytes())
628 << "We shouldn't stop deferring if we can fulfill the read"; 636 << "We shouldn't stop deferring if we can fulfill the read";
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
725 } 733 }
726 if (*last_byte_position < *first_byte_position || 734 if (*last_byte_position < *first_byte_position ||
727 (*instance_size != kPositionNotSpecified && 735 (*instance_size != kPositionNotSpecified &&
728 *last_byte_position >= *instance_size)) { 736 *last_byte_position >= *instance_size)) {
729 return false; 737 return false;
730 } 738 }
731 739
732 return true; 740 return true;
733 } 741 }
734 742
743 void BufferedResourceLoader::CancelUponDeferral() {
744 cancel_upon_deferral_ = true;
745 if (active_loader_ && active_loader_->deferred())
746 active_loader_.reset();
747 }
748
735 bool BufferedResourceLoader::VerifyPartialResponse( 749 bool BufferedResourceLoader::VerifyPartialResponse(
736 const WebURLResponse& response) { 750 const WebURLResponse& response) {
737 int64 first_byte_position, last_byte_position, instance_size; 751 int64 first_byte_position, last_byte_position, instance_size;
738 if (!ParseContentRange(response.httpHeaderField("Content-Range").utf8(), 752 if (!ParseContentRange(response.httpHeaderField("Content-Range").utf8(),
739 &first_byte_position, &last_byte_position, 753 &first_byte_position, &last_byte_position,
740 &instance_size)) { 754 &instance_size)) {
741 return false; 755 return false;
742 } 756 }
743 757
744 if (instance_size != kPositionNotSpecified) { 758 if (instance_size != kPositionNotSpecified) {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 795
782 void BufferedResourceLoader::Log() { 796 void BufferedResourceLoader::Log() {
783 media_log_->AddEvent( 797 media_log_->AddEvent(
784 media_log_->CreateBufferedExtentsChangedEvent( 798 media_log_->CreateBufferedExtentsChangedEvent(
785 offset_ - buffer_.backward_bytes(), 799 offset_ - buffer_.backward_bytes(),
786 offset_, 800 offset_,
787 offset_ + buffer_.forward_bytes())); 801 offset_ + buffer_.forward_bytes()));
788 } 802 }
789 803
790 } // namespace media 804 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698