Skip to content
This repository was archived by the owner on Apr 3, 2020. It is now read-only.

Commit

Permalink
Version 5.0.71.35 (cherry-pick)
Browse files Browse the repository at this point in the history
Merged 2837cb3

disallow left-trim fast path when sampling heap profiler is active

[email protected], [email protected]
BUG=v8:4937

Review URL: https://codereview.chromium.org/1918453002 .

Cr-Commit-Position: refs/branch-heads/5.0@{#42}
Cr-Branched-From: ad16e6c-refs/heads/5.0.71@{#1}
Cr-Branched-From: bd9df50-refs/heads/master@{#34215}
  • Loading branch information
ofrobots committed Apr 25, 2016
1 parent c36773f commit c1d51c7
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 1 deletion.
2 changes: 1 addition & 1 deletion include/v8-version.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#define V8_MAJOR_VERSION 5
#define V8_MINOR_VERSION 0
#define V8_BUILD_NUMBER 71
#define V8_PATCH_LEVEL 34
#define V8_PATCH_LEVEL 35

// Use 1 for candidates and 0 otherwise.
// (Boolean macro values are not supported by all preprocessors.)
Expand Down
3 changes: 3 additions & 0 deletions src/heap/heap.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3069,6 +3069,9 @@ void Heap::CreateFillerObjectAt(Address addr, int size) {
bool Heap::CanMoveObjectStart(HeapObject* object) {
if (!FLAG_move_object_start) return false;

// Sampling heap profiler may have a reference to the object.
if (isolate()->heap_profiler()->is_sampling_allocations()) return false;

Address address = object->address();

if (lo_space()->Contains(object)) return false;
Expand Down
1 change: 1 addition & 0 deletions src/profiler/heap-profiler.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class HeapProfiler {

bool StartSamplingHeapProfiler(uint64_t sample_interval, int stack_depth);
void StopSamplingHeapProfiler();
bool is_sampling_allocations() { return !sampling_heap_profiler_.is_empty(); }
AllocationProfile* GetAllocationProfile();

void StartHeapObjectsTracking(bool track_allocations);
Expand Down
25 changes: 25 additions & 0 deletions test/cctest/test-heap-profiler.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3010,3 +3010,28 @@ TEST(SamplingHeapProfilerApiAllocation) {

heap_profiler->StopSamplingHeapProfiler();
}

TEST(SamplingHeapProfilerLeftTrimming) {
v8::HandleScope scope(v8::Isolate::GetCurrent());
LocalContext env;
v8::HeapProfiler* heap_profiler = env->GetIsolate()->GetHeapProfiler();

// Suppress randomness to avoid flakiness in tests.
v8::internal::FLAG_sampling_heap_profiler_suppress_randomness = true;

heap_profiler->StartSamplingHeapProfiler(64);

CompileRun(
"for (var j = 0; j < 500; ++j) {\n"
" var a = [];\n"
" for (var i = 0; i < 5; ++i)\n"
" a[i] = i;\n"
" for (var i = 0; i < 3; ++i)\n"
" a.shift();\n"
"}\n");

CcTest::heap()->CollectGarbage(v8::internal::NEW_SPACE);
// Should not crash.

heap_profiler->StopSamplingHeapProfiler();
}

0 comments on commit c1d51c7

Please sign in to comment.