Use `absl::flat_hash_map` instead (#2001)
This commit is contained in:
parent
b92bf13ef5
commit
307b88f1d6
|
|
@ -62,6 +62,7 @@ jobs:
|
|||
ccache -o max_size=1G
|
||||
ccache -o hash_dir=false
|
||||
ccache -o compiler_check='%compiler% -dumpmachine; %compiler% -dumpversion'
|
||||
ccache -o hard_link=true
|
||||
ccache -zp
|
||||
- name: Build with Gradle
|
||||
run: |
|
||||
|
|
|
|||
|
|
@ -20,7 +20,8 @@
|
|||
#include "hook_bridge.h"
|
||||
#include "native_util.h"
|
||||
#include "lsplant.hpp"
|
||||
#include "unordered_map"
|
||||
#include <absl/container/flat_hash_map.h>
|
||||
#include <memory>
|
||||
#include <shared_mutex>
|
||||
#include <set>
|
||||
|
||||
|
|
@ -34,8 +35,7 @@ struct HookItem {
|
|||
};
|
||||
|
||||
std::shared_mutex hooked_lock;
|
||||
// Rehashing invalidates iterators, changes ordering between elements, and changes which buckets elements appear in, but does not invalidate pointers or references to elements.
|
||||
std::unordered_map<jmethodID, HookItem> hooked_methods;
|
||||
absl::flat_hash_map<jmethodID, std::unique_ptr<HookItem>> hooked_methods;
|
||||
|
||||
jmethodID invoke = nullptr;
|
||||
}
|
||||
|
|
@ -64,13 +64,16 @@ LSP_DEF_NATIVE_METHOD(jboolean, HookBridge, hookMethod, jobject hookMethod,
|
|||
{
|
||||
std::shared_lock lk(hooked_lock);
|
||||
if (auto found = hooked_methods.find(target); found != hooked_methods.end()) {
|
||||
hook_item = &found->second;
|
||||
hook_item = found->second.get();
|
||||
}
|
||||
}
|
||||
if (!hook_item) {
|
||||
std::unique_lock lk(hooked_lock);
|
||||
hook_item = &hooked_methods[target];
|
||||
newHook = true;
|
||||
if (auto &ptr = hooked_methods[target]; !ptr) {
|
||||
ptr = std::make_unique<HookItem>();
|
||||
hook_item = ptr.get();
|
||||
newHook = true;
|
||||
}
|
||||
}
|
||||
if (newHook) {
|
||||
auto init = env->GetMethodID(hooker, "<init>", "(Ljava/lang/reflect/Executable;)V");
|
||||
|
|
@ -92,7 +95,7 @@ LSP_DEF_NATIVE_METHOD(jboolean, HookBridge, unhookMethod, jobject hookMethod, jo
|
|||
{
|
||||
std::shared_lock lk(hooked_lock);
|
||||
if (auto found = hooked_methods.find(target); found != hooked_methods.end()) {
|
||||
hook_item = &found->second;
|
||||
hook_item = found->second.get();
|
||||
}
|
||||
}
|
||||
if (!hook_item) return JNI_FALSE;
|
||||
|
|
@ -118,7 +121,7 @@ LSP_DEF_NATIVE_METHOD(jobject, HookBridge, invokeOriginalMethod, jobject hookMet
|
|||
{
|
||||
std::shared_lock lk(hooked_lock);
|
||||
if (auto found = hooked_methods.find(target); found != hooked_methods.end()) {
|
||||
hook_item = &found->second;
|
||||
hook_item = found->second.get();
|
||||
}
|
||||
}
|
||||
jobject to_call = hookMethod;
|
||||
|
|
@ -142,7 +145,7 @@ LSP_DEF_NATIVE_METHOD(jobjectArray, HookBridge, callbackSnapshot, jobject method
|
|||
{
|
||||
std::shared_lock lk(hooked_lock);
|
||||
if (auto found = hooked_methods.find(target); found != hooked_methods.end()) {
|
||||
hook_item = &found->second;
|
||||
hook_item = found->second.get();
|
||||
}
|
||||
}
|
||||
if (!hook_item) return nullptr;
|
||||
|
|
|
|||
|
|
@ -19,11 +19,12 @@
|
|||
|
||||
#pragma once
|
||||
#include <string>
|
||||
#include <absl/container/flat_hash_map.h>
|
||||
#include "utils/jni_helper.hpp"
|
||||
|
||||
class WA: public dex::Writer::Allocator {
|
||||
// addr: {size, fd}
|
||||
std::unordered_map<void*, std::pair<size_t, int>> allocated_;
|
||||
absl::flat_hash_map<void*, std::pair<size_t, int>> allocated_;
|
||||
public:
|
||||
inline void* Allocate(size_t size) override {
|
||||
auto fd = ASharedMemory_create("", size);
|
||||
|
|
|
|||
|
|
@ -27,7 +27,8 @@ set(LIBCXX_SOURCES
|
|||
filesystem/operations.cpp
|
||||
functional.cpp
|
||||
future.cpp
|
||||
hash.cpp
|
||||
# use absl instead
|
||||
# hash.cpp
|
||||
ios.cpp
|
||||
iostream.cpp
|
||||
locale.cpp
|
||||
|
|
@ -44,7 +45,7 @@ set(LIBCXX_SOURCES
|
|||
strstream.cpp
|
||||
system_error.cpp
|
||||
thread.cpp
|
||||
typeinfo.cpp
|
||||
# typeinfo.cpp
|
||||
utility.cpp
|
||||
valarray.cpp
|
||||
variant.cpp
|
||||
|
|
@ -101,6 +102,7 @@ target_include_directories(cxx PRIVATE ${LIBCXX_INCLUDES} ${LIBCXXABI_INCLUDES})
|
|||
|
||||
link_libraries(cxx)
|
||||
|
||||
OPTION(LSPLANT_BUILD_SHARED OFF)
|
||||
add_subdirectory(lsplant/lsplant/src/main/jni)
|
||||
add_subdirectory(dobby)
|
||||
add_subdirectory(fmt)
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 5867b673803e255c4f0c75b9055fe7da3209e2ae
|
||||
Subproject commit ca19d61942994a72b8bf875ea7ed97c0e0513b74
|
||||
Loading…
Reference in New Issue