@@ -378,4 +378,54 @@ namespace AZ::IO
378
378
379
379
EXPECT_EQ (Iterations + 1 , counter);
380
380
}
381
+
382
+ TEST_F (Streamer_SchedulerTest, RequestSorting)
383
+ {
384
+ // ////////////////////////////////////////////////////////////
385
+ // Test equal priority requests that are past their deadlines (aka panic)
386
+ // ////////////////////////////////////////////////////////////
387
+ IStreamerTypes::Deadline panicDeadline (IStreamerTypes::Deadline::min ());
388
+ auto estimatedCompleteTime = AZStd::chrono::steady_clock::now ();
389
+ char fakeBuffer[8 ];
390
+ FileRequestPtr panicRequest = m_streamer->Read (" PanicRequest" , fakeBuffer, sizeof (fakeBuffer), 8 , panicDeadline);
391
+ panicRequest->m_request .SetEstimatedCompletion (estimatedCompleteTime);
392
+
393
+ // Passed deadline, same object (same pointer)
394
+ EXPECT_EQ (
395
+ m_streamer->m_streamStack ->Thread_PrioritizeRequests (&panicRequest->m_request , &panicRequest->m_request ),
396
+ Scheduler::Order::Equal);
397
+
398
+ // Passed deadline, different object
399
+ FileRequestPtr panicRequest2 = m_streamer->Read (" PanicRequest2" , fakeBuffer, sizeof (fakeBuffer), 8 , panicDeadline);
400
+ panicRequest2->m_request .SetEstimatedCompletion (estimatedCompleteTime);
401
+ EXPECT_EQ (
402
+ m_streamer->m_streamStack ->Thread_PrioritizeRequests (&panicRequest->m_request , &panicRequest2->m_request ),
403
+ Scheduler::Order::Equal);
404
+
405
+
406
+ // ////////////////////////////////////////////////////////////
407
+ // Test equal priority requests that are both reading the same file
408
+ // ////////////////////////////////////////////////////////////
409
+ FileRequestPtr readRequest = m_streamer->Read (" SameFile" , fakeBuffer, sizeof (fakeBuffer), 8 , panicDeadline);
410
+ FileRequestPtr sameFileRequest = m_streamer->CreateRequest ();
411
+ sameFileRequest->m_request .CreateRead (&sameFileRequest->m_request , fakeBuffer, 8 , RequestPath (), 0 , 8 );
412
+ sameFileRequest->m_request .m_parent = &readRequest->m_request ;
413
+ sameFileRequest->m_request .m_dependencies = 0 ;
414
+
415
+ // Same file read, same object (same pointer)
416
+ EXPECT_EQ (
417
+ m_streamer->m_streamStack ->Thread_PrioritizeRequests (&sameFileRequest->m_request , &sameFileRequest->m_request ),
418
+ Scheduler::Order::Equal);
419
+
420
+ FileRequestPtr readRequest2 = m_streamer->Read (" SameFile2" , fakeBuffer, sizeof (fakeBuffer), 8 , panicDeadline);
421
+ FileRequestPtr sameFileRequest2 = m_streamer->CreateRequest ();
422
+ sameFileRequest2->m_request .CreateRead (&sameFileRequest2->m_request , fakeBuffer, 8 , RequestPath (), 0 , 8 );
423
+ sameFileRequest2->m_request .m_parent = &readRequest2->m_request ;
424
+ sameFileRequest2->m_request .m_dependencies = 0 ;
425
+
426
+ // Same file read, different objects
427
+ EXPECT_EQ (
428
+ m_streamer->m_streamStack ->Thread_PrioritizeRequests (&sameFileRequest->m_request , &sameFileRequest2->m_request ),
429
+ Scheduler::Order::Equal);
430
+ }
381
431
} // namespace AZ::IO
0 commit comments