MCPcopy Create free account
hub / github.com/comaps/comaps / InitChunks

Method InitChunks

libs/platform/chunks_download_strategy.cpp:39–70  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

37}
38
39void ChunksDownloadStrategy::InitChunks(int64_t fileSize, int64_t chunkSize, ChunkStatusT status)
40{
41 if (chunkSize == 0)
42 {
43 int64_t constexpr kMb = 1024 * 1024;
44 size_t const sizeMb = std::max(fileSize / kMb, static_cast<int64_t>(1));
45
46 size_t constexpr kTargetCount = 40;
47 size_t constexpr kMinMb = 1;
48 size_t constexpr kMaxMb = 16;
49 size_t const chunkMb = std::min(std::max(sizeMb / kTargetCount, kMinMb), kMaxMb);
50
51 size_t chunksCount = sizeMb / chunkMb;
52 if (static_cast<int64_t>(kMb * chunkMb * chunksCount) < fileSize)
53 ++chunksCount;
54 ASSERT_GREATER_OR_EQUAL(static_cast<int64_t>(kMb * chunkMb * chunksCount), fileSize, ());
55
56 LOG(LINFO, ("File size", sizeMb, "MB; chunk size", chunkMb, "MB; chunks count", chunksCount));
57
58 m_chunks.reserve(chunksCount + 1);
59 chunkSize = chunkMb * kMb;
60 }
61 else
62 {
63 m_chunks.reserve(static_cast<size_t>(fileSize / chunkSize + 2));
64 }
65
66 for (int64_t i = 0; i < fileSize; i += chunkSize)
67 m_chunks.push_back(ChunkT(i, status));
68 // The last AUX chunk is just used to hold end of the range (eof) for the previous chunk.
69 m_chunks.push_back(ChunkT(fileSize, CHUNK_AUX));
70}
71
72void ChunksDownloadStrategy::AddChunk(RangeT const & range, ChunkStatusT status)
73{

Callers 2

FileHttpRequestMethod · 0.80
UNIT_TESTFunction · 0.80

Calls 3

ChunkTClass · 0.85
reserveMethod · 0.45
push_backMethod · 0.45

Tested by 1

UNIT_TESTFunction · 0.64