| 494 | } |
| 495 | |
| 496 | void OutputBuffer::enqueueArbitraryOutputLocked( |
| 497 | std::unique_ptr<SerializedPage> data, |
| 498 | std::vector<DataAvailable>& dataAvailableCbs) { |
| 499 | BOLT_DCHECK(isArbitrary()); |
| 500 | BOLT_DCHECK_NOT_NULL(arbitraryBuffer_); |
| 501 | BOLT_DCHECK(dataAvailableCbs.empty()); |
| 502 | BOLT_CHECK(!arbitraryBuffer_->hasNoMoreData()); |
| 503 | |
| 504 | arbitraryBuffer_->enqueue(std::move(data)); |
| 505 | BOLT_CHECK_LT(nextArbitraryLoadBufferIndex_, buffers_.size()); |
| 506 | int32_t bufferId = nextArbitraryLoadBufferIndex_; |
| 507 | for (int32_t i = 0; i < buffers_.size(); |
| 508 | ++i, bufferId = (bufferId + 1) % buffers_.size()) { |
| 509 | if (arbitraryBuffer_->empty()) { |
| 510 | nextArbitraryLoadBufferIndex_ = bufferId; |
| 511 | break; |
| 512 | } |
| 513 | auto* buffer = buffers_[bufferId].get(); |
| 514 | if (buffer == nullptr) { |
| 515 | continue; |
| 516 | } |
| 517 | buffer->maybeLoadData(arbitraryBuffer_.get()); |
| 518 | dataAvailableCbs.emplace_back(buffer->getAndClearNotify()); |
| 519 | } |
| 520 | } |
| 521 | |
| 522 | void OutputBuffer::enqueuePartitionedOutputLocked( |
| 523 | int destination, |
nothing calls this directly
no test coverage detected