218c06e803
This reverts commit a31cef44dc
.
Original message:
[heap] Divide available memory upon compaction tasks
- Fairly (round-robin) divide available memory upon compaction tasks.
- Ensure an upper limit (of memory) since dividing is O(n) for n free-space
nodes.
- Refill from free lists managed by sweeper once a compaction space becomes
empty.
Assumption for dividing memory: Memory in the free lists is sparse upon starting
compaction (which means that only few nodes are available), except for memory
reducer GCs, which happen in idle time though (so it's less of a problem).
BUG=chromium:524425
LOG=N
Review URL: https://codereview.chromium.org/1421583002
Cr-Commit-Position: refs/heads/master@{#31443}
82 lines
3.1 KiB
C++
82 lines
3.1 KiB
C++
// Copyright 2015 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef HEAP_TESTER_H_
|
|
#define HEAP_TESTER_H_
|
|
|
|
#include "src/handles.h"
|
|
#include "src/heap/spaces.h"
|
|
|
|
// Tests that should have access to private methods of {v8::internal::Heap}.
|
|
// Those tests need to be defined using HEAP_TEST(Name) { ... }.
|
|
#define HEAP_TEST_METHODS(V) \
|
|
V(CompactionSpaceDivideMultiplePages) \
|
|
V(CompactionSpaceDivideSinglePage) \
|
|
V(GCFlags) \
|
|
V(MarkCompactCollector) \
|
|
V(NoPromotion) \
|
|
V(NumberStringCacheSize) \
|
|
V(ObjectGroups) \
|
|
V(Promotion) \
|
|
V(Regression39128) \
|
|
V(ResetWeakHandle) \
|
|
V(StressHandles) \
|
|
V(TestSizeOfObjects) \
|
|
V(WriteBarriersInCopyJSObject)
|
|
|
|
|
|
#define HEAP_TEST(Name) \
|
|
CcTest register_test_##Name(v8::internal::HeapTester::Test##Name, __FILE__, \
|
|
#Name, NULL, true, true); \
|
|
void v8::internal::HeapTester::Test##Name()
|
|
|
|
|
|
#define THREADED_HEAP_TEST(Name) \
|
|
RegisterThreadedTest register_##Name(v8::internal::HeapTester::Test##Name, \
|
|
#Name); \
|
|
/* */ HEAP_TEST(Name)
|
|
|
|
|
|
namespace v8 {
|
|
namespace internal {
|
|
|
|
class HeapTester {
|
|
public:
|
|
#define DECLARE_STATIC(Name) static void Test##Name();
|
|
|
|
HEAP_TEST_METHODS(DECLARE_STATIC)
|
|
#undef HEAP_TEST_METHODS
|
|
|
|
/* test-alloc.cc */
|
|
static AllocationResult AllocateAfterFailures();
|
|
static Handle<Object> TestAllocateAfterFailures();
|
|
|
|
/* test-api.cc */
|
|
static void ResetWeakHandle(bool global_gc);
|
|
|
|
/* test-spaces.cc */
|
|
static CompactionSpaceCollection** InitializeCompactionSpaces(Heap* heap,
|
|
int num_spaces);
|
|
static void DestroyCompactionSpaces(CompactionSpaceCollection** spaces,
|
|
int num_spaces);
|
|
static void MergeCompactionSpaces(PagedSpace* space,
|
|
CompactionSpaceCollection** spaces,
|
|
int num_spaces);
|
|
static void AllocateInCompactionSpaces(CompactionSpaceCollection** spaces,
|
|
AllocationSpace id, int num_spaces,
|
|
int num_objects, int object_size);
|
|
static void CompactionStats(CompactionSpaceCollection** spaces,
|
|
AllocationSpace id, int num_spaces,
|
|
intptr_t* capacity, intptr_t* size);
|
|
static void TestCompactionSpaceDivide(int num_additional_objects,
|
|
int object_size,
|
|
int num_compaction_spaces,
|
|
int additional_capacity_in_bytes);
|
|
};
|
|
|
|
} // namespace internal
|
|
} // namespace v8
|
|
|
|
#endif // HEAP_TESTER_H_
|