// Copyright (c) 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "base/allocator/partition_allocator/partition_root_base.h"

#include "base/allocator/partition_allocator/oom.h"
#include "base/allocator/partition_allocator/partition_oom.h"
#include "base/allocator/partition_allocator/partition_page.h"
#include "build/build_config.h"

namespace base {
namespace internal {

NOINLINE void PartitionRootBase::OutOfMemory() {
#if !defined(ARCH_CPU_64_BITS)
  // Check whether this OOM is due to a lot of super pages that are allocated
  // but not committed, probably due to http://crbug.com/421387.
  if (total_size_of_super_pages + total_size_of_direct_mapped_pages -
          total_size_of_committed_pages >
      kReasonableSizeOfUnusedPages) {
    PartitionOutOfMemoryWithLotsOfUncommitedPages();
  }
#endif
  if (PartitionRootBase::gOomHandlingFunction)
    (*PartitionRootBase::gOomHandlingFunction)();
  OOM_CRASH();
}

void PartitionRootBase::DecommitEmptyPages() {
  for (size_t i = 0; i < kMaxFreeableSpans; ++i) {
    internal::PartitionPage* page = global_empty_page_ring[i];
    if (page)
      page->DecommitIfPossible(this);
    global_empty_page_ring[i] = nullptr;
  }
}

}  // namespace internal
}  // namespace base
