Stage 1 rewrite
This commit is contained in:
@@ -48,10 +48,50 @@ void TestAcquireHonorsCapacityAndFrameShape()
|
||||
|
||||
SystemOutputFramePoolMetrics metrics = pool.GetMetrics();
|
||||
Expect(metrics.freeCount == 0, "all slots are in use");
|
||||
Expect(metrics.renderingCount == 2, "rendering slots are counted");
|
||||
Expect(metrics.acquiredCount == 2, "acquired slots are counted");
|
||||
Expect(metrics.acquireMissCount == 1, "capacity miss is counted");
|
||||
}
|
||||
|
||||
void TestPhase77StateContract()
|
||||
{
|
||||
SystemOutputFramePool pool(MakeConfig(1));
|
||||
|
||||
SystemOutputFramePoolMetrics metrics = pool.GetMetrics();
|
||||
Expect(metrics.freeCount == 1, "new pool starts with one free slot");
|
||||
Expect(metrics.renderingCount == 0, "new pool starts with no rendering slots");
|
||||
Expect(metrics.completedCount == 0, "new pool starts with no completed slots");
|
||||
Expect(metrics.scheduledCount == 0, "new pool starts with no scheduled slots");
|
||||
|
||||
OutputFrameSlot slot;
|
||||
Expect(pool.AcquireRenderingSlot(slot), "free slot moves to rendering");
|
||||
metrics = pool.GetMetrics();
|
||||
Expect(metrics.freeCount == 0, "rendering slot leaves free pool");
|
||||
Expect(metrics.renderingCount == 1, "rendering slot is counted");
|
||||
|
||||
Expect(pool.PublishCompletedSlot(slot), "rendering slot moves to completed");
|
||||
metrics = pool.GetMetrics();
|
||||
Expect(metrics.renderingCount == 0, "completed slot leaves rendering");
|
||||
Expect(metrics.completedCount == 1, "completed slot is counted");
|
||||
Expect(metrics.readyCount == 1, "completed slot is available to scheduler");
|
||||
|
||||
OutputFrameSlot completed;
|
||||
Expect(pool.ConsumeCompletedSlot(completed), "completed slot can be dequeued for scheduling");
|
||||
metrics = pool.GetMetrics();
|
||||
Expect(metrics.completedCount == 1, "dequeued completed slot remains completed until scheduled");
|
||||
Expect(metrics.readyCount == 0, "dequeued completed slot leaves ready queue");
|
||||
|
||||
Expect(pool.MarkScheduled(completed), "completed slot moves to scheduled");
|
||||
metrics = pool.GetMetrics();
|
||||
Expect(metrics.completedCount == 0, "scheduled slot leaves completed state");
|
||||
Expect(metrics.scheduledCount == 1, "scheduled slot is counted");
|
||||
|
||||
Expect(pool.ReleaseScheduledSlot(completed), "scheduled slot returns to free");
|
||||
metrics = pool.GetMetrics();
|
||||
Expect(metrics.freeCount == 1, "released scheduled slot returns to free");
|
||||
Expect(metrics.scheduledCount == 0, "released scheduled slot leaves scheduled state");
|
||||
}
|
||||
|
||||
void TestReadySlotsAreConsumedFifo()
|
||||
{
|
||||
SystemOutputFramePool pool(MakeConfig(2));
|
||||
@@ -78,6 +118,25 @@ void TestReadySlotsAreConsumedFifo()
|
||||
Expect(metrics.readyCount == 0, "ready queue is empty after consumption");
|
||||
}
|
||||
|
||||
void TestCompletedSlotCannotBeAcquiredUntilReleased()
|
||||
{
|
||||
SystemOutputFramePool pool(MakeConfig(1));
|
||||
|
||||
OutputFrameSlot slot;
|
||||
OutputFrameSlot extra;
|
||||
Expect(pool.AcquireRenderingSlot(slot), "single slot can be acquired for rendering");
|
||||
Expect(pool.PublishCompletedSlot(slot), "single slot can be published completed");
|
||||
Expect(!pool.AcquireRenderingSlot(extra), "completed slot is not available for rendering");
|
||||
|
||||
OutputFrameSlot completed;
|
||||
Expect(pool.ConsumeCompletedSlot(completed), "completed slot can be dequeued");
|
||||
Expect(!pool.AcquireRenderingSlot(extra), "dequeued completed slot is still not free");
|
||||
Expect(pool.MarkScheduled(completed), "dequeued completed slot can be scheduled");
|
||||
Expect(!pool.AcquireRenderingSlot(extra), "scheduled slot is still not free");
|
||||
Expect(pool.ReleaseScheduledSlot(completed), "scheduled slot can be released");
|
||||
Expect(pool.AcquireRenderingSlot(extra), "released slot can be acquired again");
|
||||
}
|
||||
|
||||
void TestReadySlotCanBeScheduledByBuffer()
|
||||
{
|
||||
SystemOutputFramePool pool(MakeConfig(1));
|
||||
@@ -153,7 +212,9 @@ void TestEmptyReadyQueueUnderrunIsCounted()
|
||||
int main()
|
||||
{
|
||||
TestAcquireHonorsCapacityAndFrameShape();
|
||||
TestPhase77StateContract();
|
||||
TestReadySlotsAreConsumedFifo();
|
||||
TestCompletedSlotCannotBeAcquiredUntilReleased();
|
||||
TestReadySlotCanBeScheduledByBuffer();
|
||||
TestInvalidTransitionsAreRejected();
|
||||
TestPixelFormatAwareSizing();
|
||||
|
||||
Reference in New Issue
Block a user