diff options
| author | Mason Reed <mason@vector35.com> | 2025-04-28 13:58:20 -0400 |
|---|---|---|
| committer | Mason Reed <mason@vector35.com> | 2025-04-28 18:28:31 -0400 |
| commit | 4b04f93ad0161bef8434300a153aed4f5ec100f9 (patch) | |
| tree | 0b48471b529715244fd991bf56cc1dddb7799c43 /view/sharedcache/core/SharedCacheController.cpp | |
| parent | 080495bb84cf76f549a79b27957b561453452695 (diff) | |
Misc shared cache performance improvements
Diffstat (limited to 'view/sharedcache/core/SharedCacheController.cpp')
| -rw-r--r-- | view/sharedcache/core/SharedCacheController.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/view/sharedcache/core/SharedCacheController.cpp b/view/sharedcache/core/SharedCacheController.cpp index 41118d7a..ff688f3c 100644 --- a/view/sharedcache/core/SharedCacheController.cpp +++ b/view/sharedcache/core/SharedCacheController.cpp @@ -160,7 +160,10 @@ bool SharedCacheController::ApplyRegion(BinaryView& view, const CacheRegion& reg // TODO: We can use the AddRemoteMemoryRegion if we want to reload on view init. // TODO: ^ The above is only useful if we assume that all files will be available across database loads. // TODO: we might allow a user to select non-persisted memory regions as an option. - view.GetMemoryMap()->AddDataMemoryRegion(memoryRegionName, region.start, buffer, region.flags); + bool addedMemoryRegion = view.GetMemoryMap()->AddDataMemoryRegion(memoryRegionName, region.start, buffer, region.flags); + if (!addedMemoryRegion) + return false; + // TODO: We might want to make this auto if we decide to "reload" all loaded region in view init. // If we are not associated with an image we can create a section here to set the semantics. // This is important for stub regions, as they will deref non image data that we want to retrieve the value of. @@ -195,10 +198,12 @@ bool SharedCacheController::ApplyImage(BinaryView& view, const CacheImage& image { // Load all regions of an image and mark the image as loaded. // NOTE: The regions lock m_loadMutex themselves, so we do not hold it up here. + view.BeginBulkAddSegments(); bool loadedRegion = false; for (const auto& regionStart : image.regionStarts) if (ApplyRegionAtAddress(view, regionStart)) loadedRegion = true; + view.EndBulkAddSegments(); // The ApplyRegionAtAddress no longer holds the lock, we can take it now. std::unique_lock<std::shared_mutex> lock(m_loadMutex); |
