Reece
0c3344fe46
[+] IOProcessor::StartSimpleIOWatch(const AuSPtr<IIOWaitableItem> &object, const AuSPtr<IIOSimpleEventListener> &listener) [+] IOProcessor::StartSimpleLSWatch(const AuSPtr<Loop::ILoopSource> &source, const AuSPtr<IIOSimpleEventListener> &listener) [*] IOAdapterAsyncStream should reset the transactions IO state upon reaching end of segment (should this be per tick?) or upon stream error - otherwise, we end up spinning on a stuck event forever [*] Fix non-linear path under read of the AuByteBuffer [*] Fix various other nonlinear conditions under AuByteBuffer [*] IOProcessor releases registered io item from queue upon request [*] Fix ConsoleMessage::Write -> enumeration of color should be casted to a uint8 [+] Error telemetry under async task creation [*] Fix various lock ups and non-blocking spins related to erroneous InternalRunOne impl. Residual preemptive batching was fucking with modern io. [*] Cleanup TaskFrom/JobFrom. More work required to clean up legacy piss
50 lines
2.3 KiB
C++
50 lines
2.3 KiB
C++
/***
|
|
Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
|
|
|
File: IIOProcessor.hpp
|
|
Date: 2022-6-6
|
|
Author: Reece
|
|
***/
|
|
#pragma once
|
|
|
|
namespace Aurora::IO
|
|
{
|
|
struct IIOProcessor
|
|
{
|
|
virtual AuUInt32 TryTick () = 0;
|
|
virtual AuUInt32 RunTick () = 0;
|
|
virtual AuUInt32 TickFor (const AuSPtr<IIOProcessorItem> &ioEvent) = 0;
|
|
|
|
virtual AuUInt32 ManualTick () = 0;
|
|
|
|
virtual AuUInt64 SetRefreshRate (AuUInt64 ns) = 0;
|
|
virtual bool HasRefreshRate () = 0;
|
|
|
|
virtual bool MultiplexRefreshRateWithIOEvents() = 0;
|
|
|
|
virtual AuUInt64 GetOwnedThreadId () = 0;
|
|
|
|
virtual AuSPtr<IIOProcessorItem> StartIOWatch (const AuSPtr<IIOWaitableItem> &object, const AuSPtr<IIOEventListener> &listener) = 0;
|
|
virtual AuSPtr<IIOProcessorItem> StartSimpleIOWatch (const AuSPtr<IIOWaitableItem> &object, const AuSPtr<IIOSimpleEventListener> &listener) = 0;
|
|
virtual AuSPtr<IIOProcessorItem> StartSimpleLSWatch (const AuSPtr<Loop::ILoopSource> &source, const AuSPtr<IIOSimpleEventListener> &listener) = 0;
|
|
|
|
virtual bool SubmitIOWorkItem (const AuSPtr<IIOProcessorWorkUnit> &work) = 0;
|
|
|
|
// Inter-frame callbacks indicating point of execution throughout the [START](optional [yield])[IO][IO TICK][WORK ITEMS][EPILOGUE][END OF FRAME] frame
|
|
virtual bool AddEventListener (const AuSPtr<IIOProcessorEventListener> &eventListener) = 0;
|
|
virtual void RemoveEventListener(const AuSPtr<IIOProcessorEventListener> &eventListener) = 0;
|
|
|
|
virtual AuSPtr<IIOPipeProcessor> ToPipeProcessor () = 0;
|
|
|
|
// Reference loop queue
|
|
virtual AuSPtr<Loop::ILoopQueue> ToQueue () = 0;
|
|
|
|
virtual void ReleaseAllWatches () = 0;
|
|
|
|
virtual bool HasItems () = 0;
|
|
};
|
|
|
|
AUKN_SYM AuSPtr<IIOProcessor> NewIOProcessor(bool tickOnly, const AuSPtr<Loop::ILoopQueue> &queue);
|
|
AUKN_SYM AuSPtr<IIOProcessor> NewIOProcessorOnThread(bool tickOnly, Async::WorkerPId_t id);
|
|
AUKN_SYM AuSPtr<IIOProcessor> NewIOProcessorNoQueue(bool tickOnly);
|
|
} |