blob: a35fa2d015edb38a7a7ec704faae18bc10bf872e [file] [log] [blame]
Carl Shapiro69759ea2011-07-21 18:13:35 -07001// Copyright 2011 Google Inc. All Rights Reserved.
Carl Shapiro69759ea2011-07-21 18:13:35 -07002
Brian Carlstrom578bbdc2011-07-21 14:07:47 -07003#include "mark_stack.h"
Carl Shapiro69759ea2011-07-21 18:13:35 -07004
5#include <sys/mman.h>
6
Elliott Hughes90a33692011-08-30 13:27:07 -07007#include "UniquePtr.h"
Brian Carlstrom578bbdc2011-07-21 14:07:47 -07008#include "globals.h"
9#include "logging.h"
Carl Shapiro69759ea2011-07-21 18:13:35 -070010
11namespace art {
12
Brian Carlstrom4a289ed2011-08-16 17:17:49 -070013MarkStack* MarkStack::Create() {
Elliott Hughes90a33692011-08-30 13:27:07 -070014 UniquePtr<MarkStack> mark_stack(new MarkStack);
Jesse Wilson078f9b02011-11-18 17:51:47 -050015 mark_stack->Init();
16 return mark_stack.release();
Carl Shapiro69759ea2011-07-21 18:13:35 -070017}
18
Jesse Wilson078f9b02011-11-18 17:51:47 -050019void MarkStack::Init() {
Carl Shapiro69759ea2011-07-21 18:13:35 -070020 size_t length = 64 * MB;
Elliott Hughes6c9c06d2011-11-07 16:43:47 -080021 mem_map_.reset(MemMap::Map("dalvik-mark-stack", NULL, length, PROT_READ | PROT_WRITE));
Jesse Wilson078f9b02011-11-18 17:51:47 -050022 CHECK(mem_map_.get() != NULL) << "MemMap::Map() failed; aborting";
Brian Carlstromdb4d5402011-08-09 12:18:28 -070023 byte* addr = mem_map_->GetAddress();
Carl Shapiro69759ea2011-07-21 18:13:35 -070024 base_ = reinterpret_cast<const Object**>(addr);
Brian Carlstromdb4d5402011-08-09 12:18:28 -070025 limit_ = reinterpret_cast<const Object**>(addr + length);
Carl Shapiro69759ea2011-07-21 18:13:35 -070026 ptr_ = reinterpret_cast<Object const**>(addr);
27 int result = madvise(addr, length, MADV_DONTNEED);
28 if (result == -1) {
29 PLOG(WARNING) << "madvise failed";
30 }
Carl Shapiro69759ea2011-07-21 18:13:35 -070031}
32
Brian Carlstromdb4d5402011-08-09 12:18:28 -070033MarkStack::~MarkStack() {}
Carl Shapiro69759ea2011-07-21 18:13:35 -070034
35} // namespace art