diff options
author | Mathieu Chartier <mathieuc@google.com> | 2014-05-07 15:43:14 -0700 |
---|---|---|
committer | Mathieu Chartier <mathieuc@google.com> | 2014-05-13 14:45:54 -0700 |
commit | eb8167a4f4d27fce0530f6724ab8032610cd146b (patch) | |
tree | bcfeaf13ad78f2dd68466bbd0e20c71944f7e854 /runtime/stack_indirect_reference_table.h | |
parent | 6fb66a2bc4e1c0b7931101153e58714991237af7 (diff) | |
download | art-eb8167a4f4d27fce0530f6724ab8032610cd146b.zip art-eb8167a4f4d27fce0530f6724ab8032610cd146b.tar.gz art-eb8167a4f4d27fce0530f6724ab8032610cd146b.tar.bz2 |
Add Handle/HandleScope and delete SirtRef.
Delete SirtRef and replaced it with Handle. Handles are value types
which wrap around StackReference*.
Renamed StackIndirectReferenceTable to HandleScope.
Added a scoped handle wrapper which wraps around an Object** and
restores it in its destructor.
Renamed Handle::get -> Get.
Bug: 8473721
Change-Id: Idbfebd4f35af629f0f43931b7c5184b334822c7a
Diffstat (limited to 'runtime/stack_indirect_reference_table.h')
-rw-r--r-- | runtime/stack_indirect_reference_table.h | 145 |
1 files changed, 0 insertions, 145 deletions
diff --git a/runtime/stack_indirect_reference_table.h b/runtime/stack_indirect_reference_table.h deleted file mode 100644 index 3b632e7..0000000 --- a/runtime/stack_indirect_reference_table.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Copyright (C) 2011 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef ART_RUNTIME_STACK_INDIRECT_REFERENCE_TABLE_H_ -#define ART_RUNTIME_STACK_INDIRECT_REFERENCE_TABLE_H_ - -#include "base/logging.h" -#include "base/macros.h" -#include "stack.h" -#include "utils.h" - -namespace art { -namespace mirror { -class Object; -} -class Thread; - -// Stack allocated indirect reference table. It can allocated within -// the bridge frame between managed and native code backed by stack -// storage or manually allocated by SirtRef to hold one reference. -class StackIndirectReferenceTable { - public: - explicit StackIndirectReferenceTable(mirror::Object* object) : - link_(NULL), number_of_references_(1) { - references_[0].Assign(object); - } - - ~StackIndirectReferenceTable() {} - - // Number of references contained within this SIRT. - uint32_t NumberOfReferences() const { - return number_of_references_; - } - - // We have versions with and without explicit pointer size of the following. The first two are - // used at runtime, so OFFSETOF_MEMBER computes the right offsets automatically. The last one - // takes the pointer size explicitly so that at compile time we can cross-compile correctly. - - // Returns the size of a StackIndirectReferenceTable containing num_references sirts. - static size_t SizeOf(uint32_t num_references) { - size_t header_size = OFFSETOF_MEMBER(StackIndirectReferenceTable, references_); - size_t data_size = sizeof(StackReference<mirror::Object>) * num_references; - return header_size + data_size; - } - - // Get the size of the SIRT for the number of entries, with padding added for potential alignment. - static size_t GetAlignedSirtSize(uint32_t num_references) { - size_t sirt_size = SizeOf(num_references); - return RoundUp(sirt_size, 8); - } - - // Get the size of the SIRT for the number of entries, with padding added for potential alignment. - static size_t GetAlignedSirtSizeTarget(size_t pointer_size, uint32_t num_references) { - // Assume that the layout is packed. - size_t header_size = pointer_size + sizeof(number_of_references_); - // This assumes there is no layout change between 32 and 64b. - size_t data_size = sizeof(StackReference<mirror::Object>) * num_references; - size_t sirt_size = header_size + data_size; - return RoundUp(sirt_size, 8); - } - - // Link to previous SIRT or NULL. - StackIndirectReferenceTable* GetLink() const { - return link_; - } - - void SetLink(StackIndirectReferenceTable* sirt) { - DCHECK_NE(this, sirt); - link_ = sirt; - } - - // Sets the number_of_references_ field for constructing tables out of raw memory. Warning: will - // not resize anything. - void SetNumberOfReferences(uint32_t num_references) { - number_of_references_ = num_references; - } - - mirror::Object* GetReference(size_t i) const SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - DCHECK_LT(i, number_of_references_); - return references_[i].AsMirrorPtr(); - } - - StackReference<mirror::Object>* GetStackReference(size_t i) - SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - DCHECK_LT(i, number_of_references_); - return &references_[i]; - } - - void SetReference(size_t i, mirror::Object* object) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { - DCHECK_LT(i, number_of_references_); - references_[i].Assign(object); - } - - bool Contains(StackReference<mirror::Object>* sirt_entry) const { - // A SIRT should always contain something. One created by the - // jni_compiler should have a jobject/jclass as a native method is - // passed in a this pointer or a class - DCHECK_GT(number_of_references_, 0U); - return ((&references_[0] <= sirt_entry) - && (sirt_entry <= (&references_[number_of_references_ - 1]))); - } - - // Offset of link within SIRT, used by generated code - static size_t LinkOffset(size_t pointer_size) { - return 0; - } - - // Offset of length within SIRT, used by generated code - static size_t NumberOfReferencesOffset(size_t pointer_size) { - return pointer_size; - } - - // Offset of link within SIRT, used by generated code - static size_t ReferencesOffset(size_t pointer_size) { - return pointer_size + sizeof(number_of_references_); - } - - private: - StackIndirectReferenceTable() {} - - StackIndirectReferenceTable* link_; - uint32_t number_of_references_; - - // number_of_references_ are available if this is allocated and filled in by jni_compiler. - StackReference<mirror::Object> references_[1]; - - DISALLOW_COPY_AND_ASSIGN(StackIndirectReferenceTable); -}; - -} // namespace art - -#endif // ART_RUNTIME_STACK_INDIRECT_REFERENCE_TABLE_H_ |