bump_pointer_space-inl.h revision 55b2764c23776a7eba91d6514a4ad2cbc95e0fd0
1/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ART_RUNTIME_GC_SPACE_BUMP_POINTER_SPACE_INL_H_
18#define ART_RUNTIME_GC_SPACE_BUMP_POINTER_SPACE_INL_H_
19
20#include "bump_pointer_space.h"
21
22namespace art {
23namespace gc {
24namespace space {
25
26inline mirror::Object* BumpPointerSpace::AllocNonvirtualWithoutAccounting(size_t num_bytes) {
27  DCHECK(IsAligned<kAlignment>(num_bytes));
28  byte* old_end;
29  byte* new_end;
30  do {
31    old_end = end_;
32    new_end = old_end + num_bytes;
33    // If there is no more room in the region, we are out of memory.
34    if (UNLIKELY(new_end > growth_end_)) {
35      return nullptr;
36    }
37  } while (!__sync_bool_compare_and_swap(reinterpret_cast<volatile intptr_t*>(&end_),
38                                         reinterpret_cast<intptr_t>(old_end),
39                                         reinterpret_cast<intptr_t>(new_end)));
40  return reinterpret_cast<mirror::Object*>(old_end);
41}
42
43inline mirror::Object* BumpPointerSpace::AllocNonvirtual(size_t num_bytes) {
44  mirror::Object* ret = AllocNonvirtualWithoutAccounting(num_bytes);
45  if (ret != nullptr) {
46    objects_allocated_.FetchAndAdd(1);
47    bytes_allocated_.FetchAndAdd(num_bytes);
48  }
49  return ret;
50}
51
52}  // namespace space
53}  // namespace gc
54}  // namespace art
55
56#endif  // ART_RUNTIME_GC_SPACE_BUMP_POINTER_SPACE_INL_H_
57