freetype-commit
[Top][All Lists]
Advanced

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

[Git][freetype/freetype][master] [cache] Improve MRU list management.


From: Alexei Podtelezhnikov (@apodtele)
Subject: [Git][freetype/freetype][master] [cache] Improve MRU list management.
Date: Wed, 17 Apr 2024 15:07:26 +0000

Alexei Podtelezhnikov pushed to branch master at FreeType / FreeType

Commits:

  • 12adfc21
    by Alexei Podtelezhnikov (Алексей Подтележников) at 2024-04-17T15:07:23+00:00
    [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.
    

2 changed files:

Changes:

  • src/cache/ftcmanag.c
    ... ... @@ -86,12 +86,10 @@
    86 86
                           FT_Pointer   data )
    
    87 87
       {
    
    88 88
         FTC_SizeNode  node = (FTC_SizeNode)ftcnode;
    
    89
    -    FT_Size       size = node->size;
    
    90 89
         FT_UNUSED( data );
    
    91 90
     
    
    92 91
     
    
    93
    -    if ( size )
    
    94
    -      FT_Done_Size( size );
    
    92
    +    FT_Done_Size( node->size );
    
    95 93
       }
    
    96 94
     
    
    97 95
     
    

  • src/cache/ftcmru.c
    ... ... @@ -238,54 +238,62 @@
    238 238
       {
    
    239 239
         FT_Error     error;
    
    240 240
         FTC_MruNode  node   = NULL;
    
    241
    +    FTC_MruNode  prev   = NULL;
    
    241 242
         FT_Memory    memory = list->memory;
    
    242 243
     
    
    243 244
     
    
    244
    -    if ( list->num_nodes >= list->max_nodes && list->max_nodes > 0 )
    
    245
    +    if ( list->max_nodes > 0 && list->num_nodes >= list->max_nodes )
    
    245 246
         {
    
    246
    -      node = list->nodes->prev;
    
    247
    +      prev = list->nodes->prev;
    
    247 248
     
    
    248
    -      FT_ASSERT( node );
    
    249
    +      FT_ASSERT( prev );
    
    249 250
     
    
    251
    +      /* try fast reset when available */
    
    250 252
           if ( list->clazz.node_reset )
    
    251 253
           {
    
    252
    -        error = list->clazz.node_reset( node, key, list->data );
    
    254
    +        error = list->clazz.node_reset( prev, key, list->data );
    
    253 255
             if ( !error )
    
    256
    +        {
    
    257
    +          node = prev;
    
    258
    +
    
    254 259
               FTC_MruNode_Up( &list->nodes, node );
    
    255
    -        else
    
    256
    -          node = NULL;
    
    260
    +        }
    
    257 261
     
    
    258 262
             goto Exit;
    
    259 263
           }
    
    260
    -
    
    261
    -      FTC_MruNode_Remove( &list->nodes, node );
    
    262
    -      list->num_nodes--;
    
    263
    -
    
    264
    -      if ( list->clazz.node_done )
    
    265
    -        list->clazz.node_done( node, list->data );
    
    266 264
         }
    
    267 265
     
    
    268 266
         /* zero new node in case of node_init failure */
    
    269
    -    else if ( FT_ALLOC( node, list->clazz.node_size ) )
    
    267
    +    if ( FT_ALLOC( node, list->clazz.node_size ) )
    
    270 268
           goto Exit;
    
    271 269
     
    
    272 270
         error = list->clazz.node_init( node, key, list->data );
    
    273 271
         if ( error )
    
    274
    -      goto Fail;
    
    272
    +    {
    
    273
    +      prev = node;
    
    274
    +      node = NULL;
    
    275
    +
    
    276
    +      goto Clean;
    
    277
    +    }
    
    275 278
     
    
    276 279
         FTC_MruNode_Prepend( &list->nodes, node );
    
    277 280
         list->num_nodes++;
    
    278 281
     
    
    279
    -  Exit:
    
    280
    -    *anode = node;
    
    281
    -    return error;
    
    282
    +    if ( !prev )
    
    283
    +      goto Exit;
    
    282 284
     
    
    283
    -  Fail:
    
    285
    +    FTC_MruNode_Remove( &list->nodes, prev );
    
    286
    +    list->num_nodes--;
    
    287
    +
    
    288
    +  Clean:
    
    284 289
         if ( list->clazz.node_done )
    
    285
    -      list->clazz.node_done( node, list->data );
    
    290
    +      list->clazz.node_done( prev, list->data );
    
    286 291
     
    
    287
    -    FT_FREE( node );
    
    288
    -    goto Exit;
    
    292
    +    FT_FREE( prev );
    
    293
    +
    
    294
    +  Exit:
    
    295
    +    *anode = node;
    
    296
    +    return error;
    
    289 297
       }
    
    290 298
     
    
    291 299
     
    
    ... ... @@ -311,18 +319,16 @@
    311 319
       FTC_MruList_Remove( FTC_MruList  list,
    
    312 320
                           FTC_MruNode  node )
    
    313 321
       {
    
    314
    -    FTC_MruNode_Remove( &list->nodes, node );
    
    315
    -    list->num_nodes--;
    
    322
    +    FT_Memory  memory = list->memory;
    
    316 323
     
    
    317
    -    {
    
    318
    -      FT_Memory  memory = list->memory;
    
    319 324
     
    
    325
    +    FTC_MruNode_Remove( &list->nodes, node );
    
    326
    +    list->num_nodes--;
    
    320 327
     
    
    321
    -      if ( list->clazz.node_done )
    
    322
    -        list->clazz.node_done( node, list->data );
    
    328
    +    if ( list->clazz.node_done )
    
    329
    +      list->clazz.node_done( node, list->data );
    
    323 330
     
    
    324
    -      FT_FREE( node );
    
    325
    -    }
    
    331
    +    FT_FREE( node );
    
    326 332
       }
    
    327 333
     
    
    328 334
     
    


  • reply via email to

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