123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- #ifndef BASE_PROFILER_MODULE_CACHE_H_
- #define BASE_PROFILER_MODULE_CACHE_H_
- #include <memory>
- #include <set>
- #include <string>
- #include <vector>
- #include "base/base_export.h"
- #include "base/containers/flat_set.h"
- #include "base/files/file_path.h"
- #include "build/build_config.h"
- #if defined(OS_WIN)
- #include <windows.h>
- #endif
- namespace base {
- class BASE_EXPORT ModuleCache {
- public:
-
-
- class BASE_EXPORT Module {
- public:
- Module() = default;
- virtual ~Module() = default;
- Module(const Module&) = delete;
- Module& operator=(const Module&) = delete;
-
- virtual uintptr_t GetBaseAddress() const = 0;
-
-
-
-
-
-
-
- virtual std::string GetId() const = 0;
-
-
- virtual FilePath GetDebugBasename() const = 0;
-
- virtual size_t GetSize() const = 0;
-
- virtual bool IsNative() const = 0;
- };
- ModuleCache();
- ~ModuleCache();
-
-
-
- const Module* GetModuleForAddress(uintptr_t address);
- std::vector<const Module*> GetModules() const;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- void UpdateNonNativeModules(
- const std::vector<const Module*>& defunct_modules,
- std::vector<std::unique_ptr<const Module>> new_modules);
-
-
-
-
-
- void AddCustomNativeModule(std::unique_ptr<const Module> module);
-
-
-
-
-
-
- const Module* GetExistingModuleForAddress(uintptr_t address) const;
- private:
-
-
-
-
-
- struct ModuleAndAddressCompare {
- using is_transparent = void;
- bool operator()(const std::unique_ptr<const Module>& m1,
- const std::unique_ptr<const Module>& m2) const;
- bool operator()(const std::unique_ptr<const Module>& m1,
- uintptr_t address) const;
- bool operator()(uintptr_t address,
- const std::unique_ptr<const Module>& m2) const;
- };
-
-
- static std::unique_ptr<const Module> CreateModuleForAddress(
- uintptr_t address);
-
-
-
- std::set<std::unique_ptr<const Module>, ModuleAndAddressCompare>
- native_modules_;
-
-
-
-
-
-
-
-
- base::flat_set<std::unique_ptr<const Module>, ModuleAndAddressCompare>
- non_native_modules_;
-
-
-
-
-
-
- std::vector<std::unique_ptr<const Module>> inactive_non_native_modules_;
- };
- }
- #endif
|