File tree Expand file tree Collapse file tree 2 files changed +27
-1
lines changed
BizHawk.Client.Common/tools/TAStudio
BizHawk.Tests/Client.Common/Movie Expand file tree Collapse file tree 2 files changed +27
-1
lines changed Original file line number Diff line number Diff line change @@ -363,6 +363,10 @@ private int FreePage(int frame)
363
363
_midPagesUsed += pages ;
364
364
_midStates . Add ( stateToKick ) ;
365
365
}
366
+ else if ( _reserveCallback ( stateToKick . Frame ) )
367
+ {
368
+ // Recategorize as old. Nothing to do here.
369
+ }
366
370
else
367
371
{
368
372
_states . Remove ( stateToKick ) ;
@@ -382,7 +386,7 @@ private int FreePage(int frame)
382
386
StateInfo stateToKick = oldestNewerState . Frame != 0 ? oldestNewerState : _midStates . Min ;
383
387
384
388
// Kicking a state means checking if it belongs in old.
385
- bool recategorizeAsOld = ShouldKeepForOld ( stateToKick . Frame ) ;
389
+ bool recategorizeAsOld = ShouldKeepForOld ( stateToKick . Frame ) || _reserveCallback ( stateToKick . Frame ) ;
386
390
int pages = ( stateToKick . Size + PAGE_DATA_SIZE - 1 ) / PAGE_DATA_SIZE ;
387
391
_midPagesUsed -= pages ;
388
392
_midStates . Remove ( stateToKick ) ;
Original file line number Diff line number Diff line change @@ -473,6 +473,28 @@ public void CanHandleLargeBuffer()
473
473
Assert . AreEqual ( expectedStates , manager . Count ) ;
474
474
}
475
475
476
+ [ TestMethod ]
477
+ public void KeepsReservedFrames ( )
478
+ {
479
+ const int reservedFrame1 = 7 ;
480
+ int reservedFrame2 = 0 ;
481
+
482
+ IStatable ss = CreateStateSource ( ) ;
483
+ PagedStateManager manager = new ( MakeDefaultSettings ( ) , ( f ) => f == reservedFrame1 || f == reservedFrame2 ) ;
484
+ manager . Engage ( ss . CloneSavestate ( ) ) ;
485
+
486
+ for ( int i = 0 ; i < PAGE_COUNT ; i ++ )
487
+ manager . Capture ( i , ss ) ;
488
+
489
+ // Reserve a frame after capture
490
+ reservedFrame2 = 13 ;
491
+ for ( int i = PAGE_COUNT ; i < PAGE_COUNT * 2 ; i ++ )
492
+ manager . Capture ( i , ss ) ;
493
+
494
+ Assert . IsTrue ( manager . HasState ( reservedFrame1 ) ) ;
495
+ Assert . IsTrue ( manager . HasState ( reservedFrame2 ) ) ;
496
+ }
497
+
476
498
private class StateSource : IStatable
477
499
{
478
500
public int Frame { get ; set ; }
You can’t perform that action at this time.
0 commit comments