blob: f9a80f823193f33bbfa8c13d6c868a38d544b0c2 [file] [log] [blame]
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "services/network/public/cpp/loading_params.h"
#include "base/system/sys_info.h"
#include "build/build_config.h"
#include "net/base/mime_sniffer.h"
namespace network {
namespace {
// The default Mojo ring buffer size, used to send the content body.
constexpr uint32_t kDefaultDataPipeAllocationSize = 512 * 1024;
// The larger ring buffer size, used primarily for network::URLLoader loads.
// This value was optimized via Finch: see crbug.com/1041006.
constexpr uint32_t kLargerDataPipeAllocationSize = 2 * 1024 * 1024;
// The smallest buffer size must be larger than the maximum MIME sniffing
// chunk size. This is assumed several places in content/browser/loader.
static_assert(kDefaultDataPipeAllocationSize < kLargerDataPipeAllocationSize);
static_assert(kDefaultDataPipeAllocationSize >= net::kMaxBytesToSniff,
"Smallest data pipe size must be at least as large as a "
"MIME-type sniffing buffer.");
} // namespace
uint32_t GetDataPipeDefaultAllocationSize(DataPipeAllocationSize option) {
#if BUILDFLAG(IS_CHROMEOS) || defined(ARCH_CPU_32_BITS)
// TODO(crbug.com/1306998): ChromeOS experiences a much higher OOM crash
// rate if the larger data pipe size is used.
//
// On 32 bit architectures, address space and address space fragmentation are
// both concerns. There, don't attempt to have a 2MiB buffer. See
// crbug/385632154 for an example where this was causing crashes.
return kDefaultDataPipeAllocationSize;
#else
switch (option) {
case DataPipeAllocationSize::kDefaultSizeOnly:
return kDefaultDataPipeAllocationSize;
case DataPipeAllocationSize::kLargerSizeIfPossible:
return kLargerDataPipeAllocationSize;
}
#endif
}
} // namespace network