Browse Source

[TEST] Adjustments on memory reclamations

temporary-branch
CamilleLaVey 5 days ago
parent
commit
bbee229d07
  1. 6
      src/video_core/buffer_cache/buffer_cache.h
  2. 9
      src/video_core/texture_cache/texture_cache.h

6
src/video_core/buffer_cache/buffer_cache.h

@ -61,9 +61,7 @@ u64 BufferCache<P>::ReclaimMemory(u64 target_bytes, bool allow_download) {
return 0; return 0;
} }
in_reclaim = true; in_reclaim = true;
const size_t sentenced_before = sentenced_buffers.Size();
sentenced_buffers.Reclaim(runtime.CompletedSyncPoint()); sentenced_buffers.Reclaim(runtime.CompletedSyncPoint());
const bool drained = sentenced_buffers.Size() != sentenced_before;
u64 freed = 0; u64 freed = 0;
const auto clean_up = [&](BufferId buffer_id) { const auto clean_up = [&](BufferId buffer_id) {
if (freed >= target_bytes) { if (freed >= target_bytes) {
@ -88,7 +86,7 @@ u64 BufferCache<P>::ReclaimMemory(u64 target_bytes, bool allow_download) {
sentenced_buffers.Reclaim(runtime.CompletedSyncPoint()); sentenced_buffers.Reclaim(runtime.CompletedSyncPoint());
in_reclaim = false; in_reclaim = false;
usage_refresh_countdown = 0; usage_refresh_countdown = 0;
reclaim_stalled = freed == 0 && !drained;
reclaim_stalled = freed == 0;
return freed; return freed;
} }
@ -103,7 +101,7 @@ void BufferCache<P>::EnsureHeadroom(bool allow_download) {
return; return;
} }
const u64 target = (limit / 100) * RECLAIM_TARGET_PERCENT; const u64 target = (limit / 100) * RECLAIM_TARGET_PERCENT;
ReclaimMemory(usage - target, allow_download);
ReclaimMemory((std::min)(usage - target, total_used_memory), allow_download);
} }
template <class P> template <class P>

9
src/video_core/texture_cache/texture_cache.h

@ -172,15 +172,10 @@ u64 TextureCache<P>::ReclaimMemory(u64 target_bytes, bool allow_download) {
} }
in_reclaim = true; in_reclaim = true;
const u64 drain_point = runtime.CompletedSyncPoint(); const u64 drain_point = runtime.CompletedSyncPoint();
const size_t sentenced_before = sentenced_images.Size() + sentenced_image_view.Size() +
sentenced_framebuffers.Size();
TickEvictionDownloads(drain_point); TickEvictionDownloads(drain_point);
sentenced_images.Reclaim(drain_point); sentenced_images.Reclaim(drain_point);
sentenced_image_view.Reclaim(drain_point); sentenced_image_view.Reclaim(drain_point);
sentenced_framebuffers.Reclaim(drain_point); sentenced_framebuffers.Reclaim(drain_point);
const bool drained = sentenced_images.Size() + sentenced_image_view.Size() +
sentenced_framebuffers.Size() !=
sentenced_before;
u64 freed = 0; u64 freed = 0;
const auto evict = [&](ImageId image_id) { const auto evict = [&](ImageId image_id) {
if (freed >= target_bytes) { if (freed >= target_bytes) {
@ -225,7 +220,7 @@ u64 TextureCache<P>::ReclaimMemory(u64 target_bytes, bool allow_download) {
sentenced_framebuffers.Reclaim(exit_point); sentenced_framebuffers.Reclaim(exit_point);
in_reclaim = false; in_reclaim = false;
usage_refresh_countdown = 0; usage_refresh_countdown = 0;
reclaim_stalled = freed == 0 && !drained;
reclaim_stalled = freed == 0;
return freed; return freed;
} }
@ -240,7 +235,7 @@ void TextureCache<P>::EnsureHeadroom(bool allow_download) {
return; return;
} }
const u64 target = (limit / 100) * RECLAIM_TARGET_PERCENT; const u64 target = (limit / 100) * RECLAIM_TARGET_PERCENT;
ReclaimMemory(usage - target, allow_download);
ReclaimMemory((std::min)(usage - target, total_used_memory), allow_download);
} }
template <class P> template <class P>

Loading…
Cancel
Save