// Copyright 2012 the V8 project authors. All rights reserved. // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following // disclaimer in the documentation and/or other materials provided // with the distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <stdlib.h> #include "src/common/globals.h" #ifdef __linux__ #include <errno.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> #endif #include <utility> #include "include/v8-locker.h" #include "src/handles/global-handles.h" #include "src/heap/mark-compact-inl.h" #include "src/heap/mark-compact.h" #include "src/heap/marking-inl.h" #include "src/init/v8.h" #include "src/objects/objects-inl.h" #include "test/cctest/cctest.h" #include "test/cctest/heap/heap-tester.h" #include "test/cctest/heap/heap-utils.h" namespace v8 { namespace internal { namespace heap { TEST(Promotion) { … } // This is the same as Factory::NewContextfulMapForCurrentContext, except it // doesn't retry on allocation failure. AllocationResult HeapTester::AllocateMapForTest(Isolate* isolate) { … } // This is the same as Factory::NewFixedArray, except it doesn't retry // on allocation failure. AllocationResult HeapTester::AllocateFixedArrayForTest( Heap* heap, int length, AllocationType allocation) { … } HEAP_TEST(MarkCompactCollector) { … } HEAP_TEST(DoNotEvacuatePinnedPages) { … } #if defined(__has_feature) #if __has_feature(address_sanitizer) #define V8_WITH_ASAN … #endif #endif // Here is a memory use test that uses /proc, and is therefore Linux-only. We // do not care how much memory the simulator uses, since it is only there for // debugging purposes. Testing with ASAN doesn't make sense, either. #if defined(__linux__) && !defined(USE_SIMULATOR) && !defined(V8_WITH_ASAN) static uintptr_t ReadLong(char* buffer, intptr_t* position, int base) { … } // The memory use computed this way is not entirely accurate and depends on // the way malloc allocates memory. That's why the memory use may seem to // increase even though the sum of the allocated object sizes decreases. It // also means that the memory use depends on the kernel and stdlib. static intptr_t MemoryInUse() { … } intptr_t ShortLivingIsolate() { … } UNINITIALIZED_TEST(RegressJoinThreadsOnIsolateDeinit) { … } TEST(Regress5829) { … } #endif // __linux__ and !USE_SIMULATOR } // namespace heap } // namespace internal } // namespace v8