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