ART: Do some include-what-you-use
Help with transitive includes. In preparation for new
specialized headers reducing transitivity.
Bug: 118385392
Test: mmma art
Change-Id: Ib465ecceec3331ea81588fb4a43eb65e766b6904
diff --git a/dex2oat/linker/image_writer.h b/dex2oat/linker/image_writer.h
index 7bdaebe..c35dbaa 100644
--- a/dex2oat/linker/image_writer.h
+++ b/dex2oat/linker/image_writer.h
@@ -26,6 +26,7 @@
#include <set>
#include <stack>
#include <string>
+#include <unordered_map>
#include "art_method.h"
#include "base/bit_utils.h"
diff --git a/runtime/class_linker-inl.h b/runtime/class_linker-inl.h
index 0dc62d3..7e01137 100644
--- a/runtime/class_linker-inl.h
+++ b/runtime/class_linker-inl.h
@@ -22,7 +22,6 @@
#include "art_field-inl.h"
#include "art_method-inl.h"
#include "class_linker.h"
-#include "gc/heap-inl.h"
#include "gc_root-inl.h"
#include "handle_scope-inl.h"
#include "mirror/class_loader.h"
@@ -439,6 +438,14 @@
}
}
+template <ReadBarrierOption kReadBarrierOption>
+inline ObjPtr<mirror::ObjectArray<mirror::Class>> ClassLinker::GetClassRoots() {
+ ObjPtr<mirror::ObjectArray<mirror::Class>> class_roots =
+ class_roots_.Read<kReadBarrierOption>();
+ DCHECK(class_roots != nullptr);
+ return class_roots;
+}
+
} // namespace art
#endif // ART_RUNTIME_CLASS_LINKER_INL_H_
diff --git a/runtime/class_linker.h b/runtime/class_linker.h
index cc17d57..0ae7a9b 100644
--- a/runtime/class_linker.h
+++ b/runtime/class_linker.h
@@ -556,12 +556,7 @@
REQUIRES_SHARED(Locks::mutator_lock_);
template <ReadBarrierOption kReadBarrierOption = kWithReadBarrier>
- ObjPtr<mirror::ObjectArray<mirror::Class>> GetClassRoots() REQUIRES_SHARED(Locks::mutator_lock_) {
- ObjPtr<mirror::ObjectArray<mirror::Class>> class_roots =
- class_roots_.Read<kReadBarrierOption>();
- DCHECK(class_roots != nullptr);
- return class_roots;
- }
+ ObjPtr<mirror::ObjectArray<mirror::Class>> GetClassRoots() REQUIRES_SHARED(Locks::mutator_lock_);
// Move the class table to the pre-zygote table to reduce memory usage. This works by ensuring
// that no more classes are ever added to the pre zygote table which makes it that the pages
diff --git a/runtime/class_root.h b/runtime/class_root.h
index 19a78b1..1cd135f 100644
--- a/runtime/class_root.h
+++ b/runtime/class_root.h
@@ -17,7 +17,8 @@
#ifndef ART_RUNTIME_CLASS_ROOT_H_
#define ART_RUNTIME_CLASS_ROOT_H_
-#include "class_linker.h"
+#include "class_linker-inl.h"
+#include "gc_root-inl.h"
#include "mirror/class.h"
#include "mirror/object_array-inl.h"
#include "obj_ptr-inl.h"
diff --git a/runtime/class_table-inl.h b/runtime/class_table-inl.h
index 6b6fe34..a2cdb2c 100644
--- a/runtime/class_table-inl.h
+++ b/runtime/class_table-inl.h
@@ -19,6 +19,7 @@
#include "class_table.h"
+#include "base/mutex-inl.h"
#include "gc_root-inl.h"
#include "mirror/class.h"
#include "oat_file.h"
diff --git a/runtime/gc/allocator/rosalloc.cc b/runtime/gc/allocator/rosalloc.cc
index 8cc0c4e..4e2cf2b 100644
--- a/runtime/gc/allocator/rosalloc.cc
+++ b/runtime/gc/allocator/rosalloc.cc
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-#include "rosalloc.h"
+#include "rosalloc-inl.h"
#include <list>
#include <map>
diff --git a/runtime/gc/collector/concurrent_copying-inl.h b/runtime/gc/collector/concurrent_copying-inl.h
index 8fd235f..6b394c7 100644
--- a/runtime/gc/collector/concurrent_copying-inl.h
+++ b/runtime/gc/collector/concurrent_copying-inl.h
@@ -22,7 +22,7 @@
#include "gc/accounting/atomic_stack.h"
#include "gc/accounting/space_bitmap-inl.h"
#include "gc/heap.h"
-#include "gc/space/region_space.h"
+#include "gc/space/region_space-inl.h"
#include "gc/verification.h"
#include "lock_word.h"
#include "mirror/class.h"
diff --git a/runtime/gc/space/malloc_space.cc b/runtime/gc/space/malloc_space.cc
index be75efe..189aeb5 100644
--- a/runtime/gc/space/malloc_space.cc
+++ b/runtime/gc/space/malloc_space.cc
@@ -19,6 +19,7 @@
#include "android-base/stringprintf.h"
#include "base/logging.h" // For VLOG
+#include "base/mutex-inl.h"
#include "base/utils.h"
#include "gc/accounting/card_table-inl.h"
#include "gc/accounting/space_bitmap-inl.h"
diff --git a/runtime/gc/space/region_space-inl.h b/runtime/gc/space/region_space-inl.h
index 8cb079d..5ff1270 100644
--- a/runtime/gc/space/region_space-inl.h
+++ b/runtime/gc/space/region_space-inl.h
@@ -18,6 +18,10 @@
#define ART_RUNTIME_GC_SPACE_REGION_SPACE_INL_H_
#include "region_space.h"
+
+#include "base/mutex-inl.h"
+#include "mirror/object-inl.h"
+#include "region_space.h"
#include "thread-current-inl.h"
namespace art {
@@ -236,6 +240,15 @@
}
}
+template <typename Visitor>
+inline void RegionSpace::Walk(Visitor&& visitor) {
+ WalkInternal</* kToSpaceOnly= */ false>(visitor);
+}
+template <typename Visitor>
+inline void RegionSpace::WalkToSpace(Visitor&& visitor) {
+ WalkInternal</* kToSpaceOnly= */ true>(visitor);
+}
+
inline mirror::Object* RegionSpace::GetNextObject(mirror::Object* obj) {
const uintptr_t position = reinterpret_cast<uintptr_t>(obj) + obj->SizeOf();
return reinterpret_cast<mirror::Object*>(RoundUp(position, kAlignment));
diff --git a/runtime/gc/space/region_space.h b/runtime/gc/space/region_space.h
index cc371b8..8810f8c 100644
--- a/runtime/gc/space/region_space.h
+++ b/runtime/gc/space/region_space.h
@@ -205,14 +205,9 @@
// Go through all of the blocks and visit the continuous objects.
template <typename Visitor>
- ALWAYS_INLINE void Walk(Visitor&& visitor) REQUIRES(Locks::mutator_lock_) {
- WalkInternal</* kToSpaceOnly= */ false>(visitor);
- }
+ ALWAYS_INLINE void Walk(Visitor&& visitor) REQUIRES(Locks::mutator_lock_);
template <typename Visitor>
- ALWAYS_INLINE void WalkToSpace(Visitor&& visitor)
- REQUIRES(Locks::mutator_lock_) {
- WalkInternal</* kToSpaceOnly= */ true>(visitor);
- }
+ ALWAYS_INLINE void WalkToSpace(Visitor&& visitor) REQUIRES(Locks::mutator_lock_);
accounting::ContinuousSpaceBitmap::SweepCallback* GetSweepCallback() override {
return nullptr;
diff --git a/runtime/gc/space/rosalloc_space_random_test.cc b/runtime/gc/space/rosalloc_space_random_test.cc
index ca3aff4..b50859b 100644
--- a/runtime/gc/space/rosalloc_space_random_test.cc
+++ b/runtime/gc/space/rosalloc_space_random_test.cc
@@ -16,6 +16,8 @@
#include "space_test.h"
+#include "rosalloc_space.h"
+
namespace art {
namespace gc {
namespace space {
diff --git a/runtime/gc/space/rosalloc_space_static_test.cc b/runtime/gc/space/rosalloc_space_static_test.cc
index a78623e..5e7ced6 100644
--- a/runtime/gc/space/rosalloc_space_static_test.cc
+++ b/runtime/gc/space/rosalloc_space_static_test.cc
@@ -16,6 +16,8 @@
#include "space_test.h"
+#include "rosalloc_space.h"
+
namespace art {
namespace gc {
namespace space {
diff --git a/runtime/gc/space/space_test.h b/runtime/gc/space/space_test.h
index c94b666..5aac217 100644
--- a/runtime/gc/space/space_test.h
+++ b/runtime/gc/space/space_test.h
@@ -22,6 +22,7 @@
#include "base/globals.h"
#include "common_runtime_test.h"
+#include "handle_scope-inl.h"
#include "mirror/array-inl.h"
#include "mirror/class-inl.h"
#include "mirror/class_loader.h"
diff --git a/runtime/jit/jit_code_cache.cc b/runtime/jit/jit_code_cache.cc
index 8600b41..8239602 100644
--- a/runtime/jit/jit_code_cache.cc
+++ b/runtime/jit/jit_code_cache.cc
@@ -39,6 +39,7 @@
#include "dex/method_reference.h"
#include "entrypoints/runtime_asm_entrypoints.h"
#include "gc/accounting/bitmap-inl.h"
+#include "gc/allocator/dlmalloc.h"
#include "gc/scoped_gc_critical_section.h"
#include "handle.h"
#include "instrumentation.h"
diff --git a/runtime/method_handles.cc b/runtime/method_handles.cc
index 86ad32e..7d889c0 100644
--- a/runtime/method_handles.cc
+++ b/runtime/method_handles.cc
@@ -22,6 +22,7 @@
#include "common_dex_operations.h"
#include "interpreter/shadow_frame-inl.h"
#include "jvalue-inl.h"
+#include "mirror/class-inl.h"
#include "mirror/emulated_stack_frame.h"
#include "mirror/method_handle_impl-inl.h"
#include "mirror/method_type.h"
diff --git a/runtime/mirror/array-inl.h b/runtime/mirror/array-inl.h
index 704fb11..d806e40 100644
--- a/runtime/mirror/array-inl.h
+++ b/runtime/mirror/array-inl.h
@@ -27,6 +27,7 @@
#include "class.h"
#include "gc/heap-inl.h"
#include "obj_ptr-inl.h"
+#include "runtime.h"
#include "thread-current-inl.h"
namespace art {
diff --git a/runtime/mirror/dex_cache-inl.h b/runtime/mirror/dex_cache-inl.h
index 6efb747..13eaf3d 100644
--- a/runtime/mirror/dex_cache-inl.h
+++ b/runtime/mirror/dex_cache-inl.h
@@ -27,12 +27,12 @@
#include "base/enums.h"
#include "class_linker.h"
#include "dex/dex_file.h"
-#include "gc/heap-inl.h"
#include "gc_root-inl.h"
#include "mirror/call_site.h"
#include "mirror/class.h"
#include "mirror/method_type.h"
#include "obj_ptr.h"
+#include "object-inl.h"
#include "runtime.h"
#include "write_barrier-inl.h"
@@ -42,6 +42,27 @@
namespace mirror {
template <typename T>
+inline DexCachePair<T>::DexCachePair(ObjPtr<T> object, uint32_t index)
+ : object(object), index(index) {}
+
+template <typename T>
+inline void DexCachePair<T>::Initialize(std::atomic<DexCachePair<T>>* dex_cache) {
+ DexCachePair<T> first_elem;
+ first_elem.object = GcRoot<T>(nullptr);
+ first_elem.index = InvalidIndexForSlot(0);
+ dex_cache[0].store(first_elem, std::memory_order_relaxed);
+}
+
+template <typename T>
+inline T* DexCachePair<T>::GetObjectForIndex(uint32_t idx) {
+ if (idx != index) {
+ return nullptr;
+ }
+ DCHECK(!object.IsNull());
+ return object.Read();
+}
+
+template <typename T>
inline void NativeDexCachePair<T>::Initialize(std::atomic<NativeDexCachePair<T>>* dex_cache,
PointerSize pointer_size) {
NativeDexCachePair<T> first_elem;
diff --git a/runtime/mirror/dex_cache.h b/runtime/mirror/dex_cache.h
index da1cd3f..6149f9c 100644
--- a/runtime/mirror/dex_cache.h
+++ b/runtime/mirror/dex_cache.h
@@ -21,7 +21,7 @@
#include "base/bit_utils.h"
#include "base/mutex.h"
#include "dex/dex_file_types.h"
-#include "gc_root-inl.h"
+#include "gc_root.h" // Note: must not use -inl here to avoid circular dependency.
#include "object.h"
#include "object_array.h"
@@ -67,19 +67,12 @@
// it's always non-null if the id branch succeeds (except for the 0th id).
// Set the initial state for the 0th entry to be {0,1} which is guaranteed to fail
// the lookup id == stored id branch.
- DexCachePair(ObjPtr<T> object, uint32_t index)
- : object(object),
- index(index) {}
+ DexCachePair(ObjPtr<T> object, uint32_t index);
DexCachePair() : index(0) {}
DexCachePair(const DexCachePair<T>&) = default;
DexCachePair& operator=(const DexCachePair<T>&) = default;
- static void Initialize(std::atomic<DexCachePair<T>>* dex_cache) {
- DexCachePair<T> first_elem;
- first_elem.object = GcRoot<T>(nullptr);
- first_elem.index = InvalidIndexForSlot(0);
- dex_cache[0].store(first_elem, std::memory_order_relaxed);
- }
+ static void Initialize(std::atomic<DexCachePair<T>>* dex_cache);
static uint32_t InvalidIndexForSlot(uint32_t slot) {
// Since the cache size is a power of two, 0 will always map to slot 0.
@@ -87,13 +80,7 @@
return (slot == 0) ? 1u : 0u;
}
- T* GetObjectForIndex(uint32_t idx) REQUIRES_SHARED(Locks::mutator_lock_) {
- if (idx != index) {
- return nullptr;
- }
- DCHECK(!object.IsNull());
- return object.Read();
- }
+ T* GetObjectForIndex(uint32_t idx) REQUIRES_SHARED(Locks::mutator_lock_);
};
template <typename T> struct PACKED(2 * __SIZEOF_POINTER__) NativeDexCachePair {
diff --git a/runtime/mirror/object.cc b/runtime/mirror/object.cc
index 025c10b..9b38576 100644
--- a/runtime/mirror/object.cc
+++ b/runtime/mirror/object.cc
@@ -27,7 +27,7 @@
#include "dex/descriptors_names.h"
#include "dex/dex_file-inl.h"
#include "gc/accounting/card_table-inl.h"
-#include "gc/heap.h"
+#include "gc/heap-inl.h"
#include "handle_scope-inl.h"
#include "iftable-inl.h"
#include "monitor.h"
diff --git a/runtime/native/dalvik_system_DexFile.cc b/runtime/native/dalvik_system_DexFile.cc
index 69f7648..f9f87d8 100644
--- a/runtime/native/dalvik_system_DexFile.cc
+++ b/runtime/native/dalvik_system_DexFile.cc
@@ -35,6 +35,7 @@
#include "dex/descriptors_names.h"
#include "dex/dex_file-inl.h"
#include "dex/dex_file_loader.h"
+#include "handle_scope-inl.h"
#include "jit/debugger_interface.h"
#include "jni/jni_internal.h"
#include "mirror/class_loader.h"
diff --git a/runtime/native/java_lang_VMClassLoader.cc b/runtime/native/java_lang_VMClassLoader.cc
index 1ad233a..46162c1 100644
--- a/runtime/native/java_lang_VMClassLoader.cc
+++ b/runtime/native/java_lang_VMClassLoader.cc
@@ -21,6 +21,7 @@
#include "dex/descriptors_names.h"
#include "dex/dex_file_loader.h"
#include "dex/utf.h"
+#include "handle_scope-inl.h"
#include "jni/jni_internal.h"
#include "mirror/class_loader.h"
#include "mirror/object-inl.h"
diff --git a/runtime/non_debuggable_classes.cc b/runtime/non_debuggable_classes.cc
index f42a2d6..8b6c2ed 100644
--- a/runtime/non_debuggable_classes.cc
+++ b/runtime/non_debuggable_classes.cc
@@ -16,6 +16,7 @@
#include "non_debuggable_classes.h"
+#include "jni/jni_env_ext.h"
#include "jni/jni_internal.h"
#include "mirror/class-inl.h"
#include "nativehelper/scoped_local_ref.h"
diff --git a/runtime/oat.h b/runtime/oat.h
index 5c5a02d..2a6d738 100644
--- a/runtime/oat.h
+++ b/runtime/oat.h
@@ -23,7 +23,6 @@
#include "base/macros.h"
#include "base/safe_map.h"
#include "compiler_filter.h"
-#include "dex/dex_file.h"
namespace art {
diff --git a/runtime/transaction.cc b/runtime/transaction.cc
index 1e5b2bb..e4bf447 100644
--- a/runtime/transaction.cc
+++ b/runtime/transaction.cc
@@ -18,6 +18,7 @@
#include <android-base/logging.h>
+#include "base/mutex-inl.h"
#include "base/stl_util.h"
#include "gc/accounting/card_table-inl.h"
#include "gc_root-inl.h"
diff --git a/test/626-const-class-linking/clear_dex_cache_types.cc b/test/626-const-class-linking/clear_dex_cache_types.cc
index 96ef266..52367c7 100644
--- a/test/626-const-class-linking/clear_dex_cache_types.cc
+++ b/test/626-const-class-linking/clear_dex_cache_types.cc
@@ -15,6 +15,7 @@
*/
#include "jni.h"
+#include "handle_scope-inl.h"
#include "mirror/class-inl.h"
#include "mirror/class_loader.h"
#include "mirror/dex_cache-inl.h"