2a49c90346
This reverts commit 9eb090d261
.
Reason for revert: breaks trybot android-pie-arm64-dbg, repro steps: build cctest with target_cpu="arm64" in the args.
See thread:
https://chromium.slack.com/archives/CGJ5WKRUH/p1598563610118900
Original change's description:
> [heap] Add concurrent typed slot recording
>
> Since the typed slot set is not thread-safe, each concurrent marking
> barrier collects typed slots locally and publishes them to the main
> typed slot set in safepoints.
> Bug: v8:10315
>
> Change-Id: If1f5c5df786df88aac7bc27088afe91a4173c826
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2370302
> Reviewed-by: Dominik Inführ <dinfuehr@chromium.org>
> Commit-Queue: Ulan Degenbaev <ulan@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#69576}
TBR=ulan@chromium.org,dinfuehr@chromium.org
# Not skipping CQ checks because original CL landed > 1 day ago.
Bug: v8:10315
Change-Id: Iade0443e5eccef06e3ea77913e18fd1f563995f5
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2380613
Commit-Queue: Dominik Inführ <dinfuehr@chromium.org>
Reviewed-by: Dominik Inführ <dinfuehr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#69597}
95 lines
2.9 KiB
C++
95 lines
2.9 KiB
C++
// Copyright 2016 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_HEAP_UTILS_H_
|
|
#define HEAP_HEAP_UTILS_H_
|
|
|
|
#include "src/api/api-inl.h"
|
|
#include "src/heap/heap.h"
|
|
|
|
namespace v8 {
|
|
namespace internal {
|
|
namespace heap {
|
|
|
|
class TemporaryEmbedderHeapTracerScope {
|
|
public:
|
|
TemporaryEmbedderHeapTracerScope(v8::Isolate* isolate,
|
|
v8::EmbedderHeapTracer* tracer)
|
|
: isolate_(isolate) {
|
|
isolate_->SetEmbedderHeapTracer(tracer);
|
|
}
|
|
|
|
~TemporaryEmbedderHeapTracerScope() {
|
|
isolate_->SetEmbedderHeapTracer(nullptr);
|
|
}
|
|
|
|
private:
|
|
v8::Isolate* const isolate_;
|
|
};
|
|
|
|
void SealCurrentObjects(Heap* heap);
|
|
|
|
int FixedArrayLenFromSize(int size);
|
|
|
|
// Fill a page with fixed arrays leaving remainder behind. The function does
|
|
// not create additional fillers and assumes that the space has just been
|
|
// sealed.
|
|
std::vector<Handle<FixedArray>> FillOldSpacePageWithFixedArrays(Heap* heap,
|
|
int remainder);
|
|
|
|
std::vector<Handle<FixedArray>> CreatePadding(
|
|
Heap* heap, int padding_size, AllocationType allocation,
|
|
int object_size = kMaxRegularHeapObjectSize);
|
|
|
|
bool FillCurrentPage(v8::internal::NewSpace* space,
|
|
std::vector<Handle<FixedArray>>* out_handles = nullptr);
|
|
|
|
bool FillCurrentPageButNBytes(
|
|
v8::internal::NewSpace* space, int extra_bytes,
|
|
std::vector<Handle<FixedArray>>* out_handles = nullptr);
|
|
|
|
// Helper function that simulates a full new-space in the heap.
|
|
void SimulateFullSpace(v8::internal::NewSpace* space,
|
|
std::vector<Handle<FixedArray>>* out_handles = nullptr);
|
|
|
|
// Helper function that simulates many incremental marking steps until
|
|
// marking is completed.
|
|
void SimulateIncrementalMarking(i::Heap* heap, bool force_completion = true);
|
|
|
|
// Helper function that simulates a full old-space in the heap.
|
|
void SimulateFullSpace(v8::internal::PagedSpace* space);
|
|
|
|
void AbandonCurrentlyFreeMemory(PagedSpace* space);
|
|
|
|
void GcAndSweep(Heap* heap, AllocationSpace space);
|
|
|
|
void ForceEvacuationCandidate(Page* page);
|
|
|
|
void InvokeScavenge();
|
|
|
|
void InvokeMarkSweep();
|
|
|
|
template <typename GlobalOrPersistent>
|
|
bool InYoungGeneration(v8::Isolate* isolate, const GlobalOrPersistent& global) {
|
|
v8::HandleScope scope(isolate);
|
|
auto tmp = global.Get(isolate);
|
|
return i::Heap::InYoungGeneration(*v8::Utils::OpenHandle(*tmp));
|
|
}
|
|
|
|
bool InCorrectGeneration(HeapObject object);
|
|
|
|
template <typename GlobalOrPersistent>
|
|
bool InCorrectGeneration(v8::Isolate* isolate,
|
|
const GlobalOrPersistent& global) {
|
|
v8::HandleScope scope(isolate);
|
|
auto tmp = global.Get(isolate);
|
|
return InCorrectGeneration(*v8::Utils::OpenHandle(*tmp));
|
|
}
|
|
|
|
} // namespace heap
|
|
} // namespace internal
|
|
} // namespace v8
|
|
|
|
#endif // HEAP_HEAP_UTILS_H_
|