summaryrefslogtreecommitdiff
path: root/runtime/class_table.h
diff options
context:
space:
mode:
author Vladimir Marko <vmarko@google.com> 2022-04-06 09:30:50 +0000
committer VladimĂ­r Marko <vmarko@google.com> 2024-11-05 15:24:05 +0000
commit29ec7aef84f4b47d89edee274562b22a177b00b8 (patch)
treef958dafda289458ce7dac0ad86f7596636ee7ecf /runtime/class_table.h
parent96dc77238e2b5a962911a6da06d5e1b869dc92f8 (diff)
Use `std::string_view` for `ClassTable` operations.
Use `std::string_view` instead of `const char*` descriptor. This uses faster `memcmp` instead of the slower`strcmp` for descriptor comparison. Note that the `ScopedTrace` passes `const char*` across the `libartpalette` boundary, so we cannot easily replace the `const char* descriptor` with `std::string_view descriptor` in certain `ClassLinker` functions because we actually need to pass a null-terminated string and the `string_view` API does not technically guarantee null-terminated data. Therefore we resort to explicitly passing around the descriptor and its length as separate arguments. Test: m test-art-host-gtest Test: testrunner.py --host --optimizing Bug: 181943478 Bug: 338123769 Change-Id: Ie3fa251390acc582c54b4686d18696eb89b32361
Diffstat (limited to 'runtime/class_table.h')
-rw-r--r--runtime/class_table.h7
1 files changed, 4 insertions, 3 deletions
diff --git a/runtime/class_table.h b/runtime/class_table.h
index 3374622f00..64ae758208 100644
--- a/runtime/class_table.h
+++ b/runtime/class_table.h
@@ -114,14 +114,15 @@ class ClassTable {
static constexpr uint32_t kHashMask = kObjectAlignment - 1;
};
- using DescriptorHashPair = std::pair<const char*, uint32_t>;
+ using DescriptorHashPair = std::pair<std::string_view, uint32_t>;
class ClassDescriptorHash {
public:
// uint32_t for cross compilation.
+ // NO_THREAD_SAFETY_ANALYSIS: Used from unannotated `HashSet<>` functions.
uint32_t operator()(const TableSlot& slot) const NO_THREAD_SAFETY_ANALYSIS;
// uint32_t for cross compilation.
- uint32_t operator()(const DescriptorHashPair& pair) const NO_THREAD_SAFETY_ANALYSIS;
+ uint32_t operator()(const DescriptorHashPair& pair) const;
};
class ClassDescriptorEquals {
@@ -221,7 +222,7 @@ class ClassTable {
REQUIRES_SHARED(Locks::mutator_lock_);
// Return the first class that matches the descriptor. Returns null if there are none.
- ObjPtr<mirror::Class> Lookup(const char* descriptor, size_t hash)
+ ObjPtr<mirror::Class> Lookup(std::string_view descriptor, size_t hash)
REQUIRES(!lock_)
REQUIRES_SHARED(Locks::mutator_lock_);