1b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Copyright 2012 the V8 project authors. All rights reserved. 2b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch// found in the LICENSE file. 4b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 5b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#ifndef V8_HEAP_INCREMENTAL_MARKING_INL_H_ 6b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#define V8_HEAP_INCREMENTAL_MARKING_INL_H_ 7b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 8b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#include "src/heap/incremental-marking.h" 9f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch#include "src/isolate.h" 10b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 11b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace v8 { 12b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochnamespace internal { 13b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 14b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 15b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid IncrementalMarking::RecordWrite(HeapObject* obj, Object** slot, 16b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Object* value) { 17b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (IsMarking() && value->IsHeapObject()) { 18b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch RecordWriteSlow(obj, slot, value); 19b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 20b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 21b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 22b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 23b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdochvoid IncrementalMarking::RecordWriteOfCodeEntry(JSFunction* host, Object** slot, 24b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Code* value) { 25014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch if (IsMarking()) { 26014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch RecordWriteOfCodeEntrySlow(host, slot, value); 27014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch } 28b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 29b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 303b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochvoid IncrementalMarking::RecordWriteIntoCode(Code* host, RelocInfo* rinfo, 31b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch Object* value) { 32b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch if (IsMarking() && value->IsHeapObject()) { 333b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch RecordWriteIntoCodeSlow(host, rinfo, value); 34b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch } 35b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch} 36b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 37f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdochvoid IncrementalMarking::RestartIfNotMarking() { 38f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch if (state_ == COMPLETE) { 39f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch state_ = MARKING; 40f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch if (FLAG_trace_incremental_marking) { 41f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch heap()->isolate()->PrintWithTimestamp( 42f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch "[IncrementalMarking] Restarting (new grey objects)\n"); 43f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch } 44f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch } 45f3b273f5e6ffd2f6ba1c18a27a17db41dfb113c3Ben Murdoch} 46b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 47014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace internal 48014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch} // namespace v8 49b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch 50b8a8cc1952d61a2f3a2568848933943a543b5d3eBen Murdoch#endif // V8_HEAP_INCREMENTAL_MARKING_INL_H_ 51