0

Use spans in chrome_pdf::DocumentLoaderImpl::SaveBuffer().

Replace a pointer/size pair with a span.

Change-Id: I1773fc3a65464eb891db7324eef1be8e5791928c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4214272
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1100137}
This commit is contained in:
Lei Zhang
2023-02-01 23:03:25 +00:00
committed by Chromium LUCI CQ
parent 3d2478fd85
commit 2f20a2d3f3
2 changed files with 9 additions and 8 deletions

@ -11,6 +11,7 @@
#include <utility>
#include "base/check_op.h"
#include "base/containers/span.h"
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
@ -317,7 +318,7 @@ void DocumentLoaderImpl::DidRead(int32_t result) {
DCHECK(!chunk_.chunk_data);
chunk_.chunk_index = chunk_stream_.GetChunkIndex(start_pos);
}
if (!SaveBuffer(buffer_.data(), result)) {
if (!SaveBuffer(result)) {
return ReadMore();
}
if (IsDocumentComplete())
@ -325,18 +326,19 @@ void DocumentLoaderImpl::DidRead(int32_t result) {
return ContinueDownload();
}
bool DocumentLoaderImpl::SaveBuffer(char* input, uint32_t input_size) {
bool DocumentLoaderImpl::SaveBuffer(uint32_t input_size) {
const uint32_t document_size = GetDocumentSize();
bytes_received_ += input_size;
bool chunk_saved = false;
bool loading_pending_request = pending_requests_.Contains(chunk_.chunk_index);
while (input_size > 0) {
auto input = base::make_span(buffer_).first(input_size);
while (!input.empty()) {
if (chunk_.data_size == 0)
chunk_.chunk_data = std::make_unique<DataStream::ChunkData>();
const size_t new_chunk_data_len =
std::min(DataStream::kChunkSize - chunk_.data_size, size_t{input_size});
memcpy(chunk_.chunk_data->data() + chunk_.data_size, input,
std::min(DataStream::kChunkSize - chunk_.data_size, input.size());
memcpy(chunk_.chunk_data->data() + chunk_.data_size, input.data(),
new_chunk_data_len);
chunk_.data_size += new_chunk_data_len;
if (chunk_.data_size == DataStream::kChunkSize ||
@ -347,8 +349,7 @@ bool DocumentLoaderImpl::SaveBuffer(char* input, uint32_t input_size) {
chunk_saved = true;
}
input += new_chunk_data_len;
input_size -= new_chunk_data_len;
input = input.subspan(new_chunk_data_len);
}
client_->OnNewDataReceived();

@ -71,7 +71,7 @@ class DocumentLoaderImpl : public DocumentLoader {
// Called when we complete server request.
void ReadComplete();
bool SaveBuffer(char* input, uint32_t input_size);
bool SaveBuffer(uint32_t input_size);
void SaveChunkData();
uint32_t EndOfCurrentChunk() const;