freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[freetype2] master 12adfc212: [cache] Improve MRU list management.


From: Werner Lemberg
Subject: [freetype2] master 12adfc212: [cache] Improve MRU list management.
Date: Wed, 17 Apr 2024 11:07:34 -0400 (EDT)

branch: master
commit 12adfc212bd2f7560e1e175e66458124f9bd554b
Author: Alexei Podtelezhnikov <apodtele@gmail.com>
Commit: Alexei Podtelezhnikov <apodtele@gmail.com>

    [cache] Improve MRU list management.
    
    * src/cache/ftcmru.c (FTC_MruList_Remove): Cosmetic.
    (FTC_MruList_New): Accept only valid changes.
    * src/cache/ftcmanag.c (ftc_size_node_done):  Simplify.
---
 src/cache/ftcmanag.c |  4 +---
 src/cache/ftcmru.c   | 64 ++++++++++++++++++++++++++++------------------------
 2 files changed, 36 insertions(+), 32 deletions(-)

diff --git a/src/cache/ftcmanag.c b/src/cache/ftcmanag.c
index 6b8b80e33..881b460a8 100644
--- a/src/cache/ftcmanag.c
+++ b/src/cache/ftcmanag.c
@@ -86,12 +86,10 @@
                       FT_Pointer   data )
   {
     FTC_SizeNode  node = (FTC_SizeNode)ftcnode;
-    FT_Size       size = node->size;
     FT_UNUSED( data );
 
 
-    if ( size )
-      FT_Done_Size( size );
+    FT_Done_Size( node->size );
   }
 
 
diff --git a/src/cache/ftcmru.c b/src/cache/ftcmru.c
index dd23d31a3..a767fa408 100644
--- a/src/cache/ftcmru.c
+++ b/src/cache/ftcmru.c
@@ -238,54 +238,62 @@
   {
     FT_Error     error;
     FTC_MruNode  node   = NULL;
+    FTC_MruNode  prev   = NULL;
     FT_Memory    memory = list->memory;
 
 
-    if ( list->num_nodes >= list->max_nodes && list->max_nodes > 0 )
+    if ( list->max_nodes > 0 && list->num_nodes >= list->max_nodes )
     {
-      node = list->nodes->prev;
+      prev = list->nodes->prev;
 
-      FT_ASSERT( node );
+      FT_ASSERT( prev );
 
+      /* try fast reset when available */
       if ( list->clazz.node_reset )
       {
-        error = list->clazz.node_reset( node, key, list->data );
+        error = list->clazz.node_reset( prev, key, list->data );
         if ( !error )
+        {
+          node = prev;
+
           FTC_MruNode_Up( &list->nodes, node );
-        else
-          node = NULL;
+        }
 
         goto Exit;
       }
-
-      FTC_MruNode_Remove( &list->nodes, node );
-      list->num_nodes--;
-
-      if ( list->clazz.node_done )
-        list->clazz.node_done( node, list->data );
     }
 
     /* zero new node in case of node_init failure */
-    else if ( FT_ALLOC( node, list->clazz.node_size ) )
+    if ( FT_ALLOC( node, list->clazz.node_size ) )
       goto Exit;
 
     error = list->clazz.node_init( node, key, list->data );
     if ( error )
-      goto Fail;
+    {
+      prev = node;
+      node = NULL;
+
+      goto Clean;
+    }
 
     FTC_MruNode_Prepend( &list->nodes, node );
     list->num_nodes++;
 
-  Exit:
-    *anode = node;
-    return error;
+    if ( !prev )
+      goto Exit;
 
-  Fail:
+    FTC_MruNode_Remove( &list->nodes, prev );
+    list->num_nodes--;
+
+  Clean:
     if ( list->clazz.node_done )
-      list->clazz.node_done( node, list->data );
+      list->clazz.node_done( prev, list->data );
 
-    FT_FREE( node );
-    goto Exit;
+    FT_FREE( prev );
+
+  Exit:
+    *anode = node;
+    return error;
   }
 
 
@@ -311,18 +319,16 @@
   FTC_MruList_Remove( FTC_MruList  list,
                       FTC_MruNode  node )
   {
-    FTC_MruNode_Remove( &list->nodes, node );
-    list->num_nodes--;
+    FT_Memory  memory = list->memory;
 
-    {
-      FT_Memory  memory = list->memory;
 
+    FTC_MruNode_Remove( &list->nodes, node );
+    list->num_nodes--;
 
-      if ( list->clazz.node_done )
-        list->clazz.node_done( node, list->data );
+    if ( list->clazz.node_done )
+      list->clazz.node_done( node, list->data );
 
-      FT_FREE( node );
-    }
+    FT_FREE( node );
   }
 
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]