diff options
author | 2019-01-04 16:08:51 -0800 | |
---|---|---|
committer | 2019-01-09 12:38:30 -0800 | |
commit | a1ffdba7e285435cbb3538473f25eb7cb47cfd66 (patch) | |
tree | 35b1ad4e66839425ef3ff52287e53dec4e5a348e | |
parent | 5a0430d0239481f4efb252d60ec9641703b8d456 (diff) |
ART: IWYU handle_scope
Move wrappers to their own header. Forward-declare handles.
Bug: 119869270
Test: m
Change-Id: I9fba4df9b589cec07c7f687791ddbed81d188410
-rw-r--r-- | runtime/handle_scope-inl.h | 10 | ||||
-rw-r--r-- | runtime/handle_scope.h | 51 | ||||
-rw-r--r-- | runtime/handle_wrapper.h | 65 | ||||
-rw-r--r-- | runtime/thread.h | 1 |
4 files changed, 81 insertions, 46 deletions
diff --git a/runtime/handle_scope-inl.h b/runtime/handle_scope-inl.h index f61c700a36..765ed7d53b 100644 --- a/runtime/handle_scope-inl.h +++ b/runtime/handle_scope-inl.h @@ -21,6 +21,7 @@ #include "base/mutex.h" #include "handle.h" +#include "handle_wrapper.h" #include "obj_ptr-inl.h" #include "thread-current-inl.h" #include "verify_object.h" @@ -106,6 +107,15 @@ inline bool HandleScope::Contains(StackReference<mirror::Object>* handle_scope_e handle_scope_entry <= &GetReferences()[number_of_references_ - 1]; } +template <typename Visitor> +inline void HandleScope::VisitRoots(Visitor& visitor) { + for (size_t i = 0, count = NumberOfReferences(); i < count; ++i) { + // GetReference returns a pointer to the stack reference within the handle scope. If this + // needs to be updated, it will be done by the root visitor. + visitor.VisitRootIfNonNull(GetHandle(i).GetReference()); + } +} + template<size_t kNumReferences> template<class T> inline MutableHandle<T> FixedSizeHandleScope<kNumReferences>::NewHandle(T* object) { SetReference(pos_, object); diff --git a/runtime/handle_scope.h b/runtime/handle_scope.h index 1a1c92f9c5..dae8e29ef0 100644 --- a/runtime/handle_scope.h +++ b/runtime/handle_scope.h @@ -24,13 +24,16 @@ #include "base/enums.h" #include "base/locks.h" #include "base/macros.h" -#include "handle.h" #include "stack_reference.h" #include "verify_object.h" namespace art { +template<class T> class Handle; class HandleScope; +template<class T> class HandleWrapper; +template<class T> class HandleWrapperObjPtr; +template<class T> class MutableHandle; template<class MirrorType> class ObjPtr; class Thread; class VariableSizedHandleScope; @@ -144,13 +147,7 @@ class PACKED(4) HandleScope : public BaseHandleScope { } template <typename Visitor> - void VisitRoots(Visitor& visitor) REQUIRES_SHARED(Locks::mutator_lock_) { - for (size_t i = 0, count = NumberOfReferences(); i < count; ++i) { - // GetReference returns a pointer to the stack reference within the handle scope. If this - // needs to be updated, it will be done by the root visitor. - visitor.VisitRootIfNonNull(GetHandle(i).GetReference()); - } - } + ALWAYS_INLINE void VisitRoots(Visitor& visitor) REQUIRES_SHARED(Locks::mutator_lock_); protected: // Return backing storage used for references. @@ -172,44 +169,6 @@ class PACKED(4) HandleScope : public BaseHandleScope { DISALLOW_COPY_AND_ASSIGN(HandleScope); }; -// A wrapper which wraps around Object** and restores the pointer in the destructor. -// TODO: Delete -template<class T> -class HandleWrapper : public MutableHandle<T> { - public: - HandleWrapper(T** obj, const MutableHandle<T>& handle) - : MutableHandle<T>(handle), obj_(obj) { - } - - HandleWrapper(const HandleWrapper&) = default; - - ~HandleWrapper() { - *obj_ = MutableHandle<T>::Get(); - } - - private: - T** const obj_; -}; - - -// A wrapper which wraps around ObjPtr<Object>* and restores the pointer in the destructor. -// TODO: Add more functionality. -template<class T> -class HandleWrapperObjPtr : public MutableHandle<T> { - public: - HandleWrapperObjPtr(ObjPtr<T>* obj, const MutableHandle<T>& handle) - : MutableHandle<T>(handle), obj_(obj) {} - - HandleWrapperObjPtr(const HandleWrapperObjPtr&) = default; - - ~HandleWrapperObjPtr() { - *obj_ = ObjPtr<T>(MutableHandle<T>::Get()); - } - - private: - ObjPtr<T>* const obj_; -}; - // Fixed size handle scope that is not necessarily linked in the thread. template<size_t kNumReferences> class PACKED(4) FixedSizeHandleScope : public HandleScope { diff --git a/runtime/handle_wrapper.h b/runtime/handle_wrapper.h new file mode 100644 index 0000000000..01252c724d --- /dev/null +++ b/runtime/handle_wrapper.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2014 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_HANDLE_WRAPPER_H_ +#define ART_RUNTIME_HANDLE_WRAPPER_H_ + +#include "handle.h" +#include "obj_ptr.h" + +namespace art { + +// A wrapper which wraps around Object** and restores the pointer in the destructor. +// TODO: Delete +template<class T> +class HandleWrapper : public MutableHandle<T> { + public: + HandleWrapper(T** obj, const MutableHandle<T>& handle) + : MutableHandle<T>(handle), obj_(obj) { + } + + HandleWrapper(const HandleWrapper&) = default; + + ~HandleWrapper() { + *obj_ = MutableHandle<T>::Get(); + } + + private: + T** const obj_; +}; + + +// A wrapper which wraps around ObjPtr<Object>* and restores the pointer in the destructor. +// TODO: Add more functionality. +template<class T> +class HandleWrapperObjPtr : public MutableHandle<T> { + public: + HandleWrapperObjPtr(ObjPtr<T>* obj, const MutableHandle<T>& handle) + : MutableHandle<T>(handle), obj_(obj) {} + + HandleWrapperObjPtr(const HandleWrapperObjPtr&) = default; + + ~HandleWrapperObjPtr() { + *obj_ = ObjPtr<T>(MutableHandle<T>::Get()); + } + + private: + ObjPtr<T>* const obj_; +}; + +} // namespace art + +#endif // ART_RUNTIME_HANDLE_WRAPPER_H_ diff --git a/runtime/thread.h b/runtime/thread.h index 334e9b70c3..4ac0f00405 100644 --- a/runtime/thread.h +++ b/runtime/thread.h @@ -32,6 +32,7 @@ #include "base/locks.h" #include "base/macros.h" #include "base/safe_map.h" +#include "base/value_object.h" #include "entrypoints/jni/jni_entrypoints.h" #include "entrypoints/quick/quick_entrypoints.h" #include "handle_scope.h" |