| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <stddef.h> | 5 #include <stddef.h> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/callback_helpers.h" | 8 #include "base/callback_helpers.h" |
| 9 #include "base/location.h" | 9 #include "base/location.h" |
| 10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 } | 171 } |
| 172 | 172 |
| 173 void MultiBufferReader::NotifyAvailableRange( | 173 void MultiBufferReader::NotifyAvailableRange( |
| 174 const Interval<MultiBufferBlockId>& range) { | 174 const Interval<MultiBufferBlockId>& range) { |
| 175 // Update end_ if we can. | 175 // Update end_ if we can. |
| 176 if (range.end > range.begin) { | 176 if (range.end > range.begin) { |
| 177 UpdateEnd(range.end); | 177 UpdateEnd(range.end); |
| 178 } | 178 } |
| 179 UpdateInternalState(); | 179 UpdateInternalState(); |
| 180 if (!progress_callback_.is_null()) { | 180 if (!progress_callback_.is_null()) { |
| 181 // We redirect the call through a weak pointer to ourselves to guarantee | |
| 182 // there are no callbacks from us after we've been destroyed. | |
| 183 base::ThreadTaskRunnerHandle::Get()->PostTask( | 181 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 184 FROM_HERE, | 182 FROM_HERE, |
| 185 base::Bind( | 183 base::Bind(progress_callback_, static_cast<int64_t>(range.begin) |
| 186 &MultiBufferReader::Call, weak_factory_.GetWeakPtr(), | 184 << multibuffer_->block_size_shift(), |
| 187 base::Bind(progress_callback_, | 185 (static_cast<int64_t>(range.end) |
| 188 static_cast<int64_t>(range.begin) | 186 << multibuffer_->block_size_shift()) + |
| 189 << multibuffer_->block_size_shift(), | 187 multibuffer_->UncommittedBytesAt(range.end))); |
| 190 (static_cast<int64_t>(range.end) | |
| 191 << multibuffer_->block_size_shift()) + | |
| 192 multibuffer_->UncommittedBytesAt(range.end)))); | |
| 193 } | 188 } |
| 194 } | 189 } |
| 195 | 190 |
| 196 void MultiBufferReader::UpdateInternalState() { | 191 void MultiBufferReader::UpdateInternalState() { |
| 197 int64_t effective_preload = loading_ ? preload_high_ : preload_low_; | 192 int64_t effective_preload = loading_ ? preload_high_ : preload_low_; |
| 198 | 193 |
| 199 loading_ = false; | 194 loading_ = false; |
| 200 if (preload_pos_ == -1) { | 195 if (preload_pos_ == -1) { |
| 201 preload_pos_ = block(pos_); | 196 preload_pos_ = block(pos_); |
| 202 DCHECK_GE(preload_pos_, 0); | 197 DCHECK_GE(preload_pos_, 0); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 242 // Use a rangemap to compute the diff in pinning. | 237 // Use a rangemap to compute the diff in pinning. |
| 243 IntervalMap<MultiBuffer::BlockId, int32_t> tmp; | 238 IntervalMap<MultiBuffer::BlockId, int32_t> tmp; |
| 244 tmp.IncrementInterval(pinned_range_.begin, pinned_range_.end, -1); | 239 tmp.IncrementInterval(pinned_range_.begin, pinned_range_.end, -1); |
| 245 tmp.IncrementInterval(begin, end, 1); | 240 tmp.IncrementInterval(begin, end, 1); |
| 246 multibuffer_->PinRanges(tmp); | 241 multibuffer_->PinRanges(tmp); |
| 247 pinned_range_.begin = begin; | 242 pinned_range_.begin = begin; |
| 248 pinned_range_.end = end; | 243 pinned_range_.end = end; |
| 249 } | 244 } |
| 250 | 245 |
| 251 } // namespace media | 246 } // namespace media |
| OLD | NEW |