[03/15] pb_cache: call os_time_get outside of the loop

Submitted by Marek Olšák on Jan. 6, 2018, 11:12 a.m.

Details

Message ID 1515237172-24261-4-git-send-email-maraeo@gmail.com
State New
Headers show
Series "RadeonSI 32-bit GPU pointers" ( rev: 1 ) in Mesa

Not browsing as part of any series.

Commit Message

Marek Olšák Jan. 6, 2018, 11:12 a.m.
From: Marek Olšák <marek.olsak@amd.com>

---
 src/gallium/auxiliary/pipebuffer/pb_cache.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/gallium/auxiliary/pipebuffer/pb_cache.c b/src/gallium/auxiliary/pipebuffer/pb_cache.c
index b67e54b..dd479ae 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_cache.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_cache.c
@@ -47,34 +47,32 @@  destroy_buffer_locked(struct pb_cache_entry *entry)
       --mgr->num_buffers;
       mgr->cache_size -= buf->size;
    }
    mgr->destroy_buffer(buf);
 }
 
 /**
  * Free as many cache buffers from the list head as possible.
  */
 static void
-release_expired_buffers_locked(struct list_head *cache)
+release_expired_buffers_locked(struct list_head *cache,
+                               int64_t current_time)
 {
    struct list_head *curr, *next;
    struct pb_cache_entry *entry;
-   int64_t now;
-
-   now = os_time_get();
 
    curr = cache->next;
    next = curr->next;
    while (curr != cache) {
       entry = LIST_ENTRY(struct pb_cache_entry, curr, head);
 
-      if (!os_time_timeout(entry->start, entry->end, now))
+      if (!os_time_timeout(entry->start, entry->end, current_time))
          break;
 
       destroy_buffer_locked(entry);
 
       curr = next;
       next = curr->next;
    }
 }
 
 /**
@@ -85,22 +83,24 @@  void
 pb_cache_add_buffer(struct pb_cache_entry *entry)
 {
    struct pb_cache *mgr = entry->mgr;
    struct list_head *cache = &mgr->buckets[entry->bucket_index];
    struct pb_buffer *buf = entry->buffer;
    unsigned i;
 
    mtx_lock(&mgr->mutex);
    assert(!pipe_is_referenced(&buf->reference));
 
+   int64_t current_time = os_time_get();
+
    for (i = 0; i < ARRAY_SIZE(mgr->buckets); i++)
-      release_expired_buffers_locked(&mgr->buckets[i]);
+      release_expired_buffers_locked(&mgr->buckets[i], current_time);
 
    /* Directly release any buffer that exceeds the limit. */
    if (mgr->cache_size + buf->size > mgr->max_cache_size) {
       mgr->destroy_buffer(buf);
       mtx_unlock(&mgr->mutex);
       return;
    }
 
    entry->start = os_time_get();
    entry->end = entry->start + mgr->usecs;