33 return Samples[i + 1] - Samples[i];
54 .Name =
"Iax/Activity",
108#if IAS_HTTP_WITH_PERF
113 enum class EState :
uint8
128 void ChangeState(EState
InState);
129 FOutcome Transact(FHttpPeer& Peer);
130 FOutcome Send(FHttpPeer& Peer);
131 FOutcome RecvMessage(FHttpPeer& Peer);
136 EState State = EState::Build;
137 uint8 bAllowChunked : 1;
139 uint8 LengthScore : 4;
145#if IAS_HTTP_WITH_PERF
172: bAllowChunked(Params.bAllowChunked)
180 check(Path[0] ==
'/');
192 MethodOffset =
Copy(Params.Method);
193 PathOffset =
Copy(Path);
194 PathLength =
uint16(Path.Len());
206 check(State == EState::Build);
208 check(HeaderCount < 0xffff);
211 static_assert(
alignof(FHeaderRecord) ==
alignof(
uint16));
219 char* Cursor =
Record->Data;
220 std::memcpy(Cursor, Key.GetData(), Key.Len());
221 std::memcpy(Cursor + Key.Len(),
Value.GetData(),
Value.Len());
240 if (State >= EState::Completed)
245 ChangeState(EState::Cancelled);
252 ChangeState(EState::RecvDone);
254 ChangeState(EState::Completed);
260 if (State == EState::Failed)
268 ChangeState(EState::Failed);
273void FActivity::ChangeState(EState
InState)
282void FActivity::CallSink()
288 FTicketStatus&
SinkArg = *(FTicketStatus*)
this;
300 case EState::RecvContent:
301 case EState::RecvStream:
314 check(TransactId != 0);
321 check(State >= EState::Send && State <= EState::Completed);
329 return { Buffer.
GetData() + MethodOffset, PathOffset - MethodOffset };
335 return { Buffer.
GetData() + PathOffset, PathLength };
341 check(State <= EState::RecvMessage);
349 for (
uint32 i = 0, n = HeaderCount; i < n; ++i)
371 check(State == EState::RecvContent || State == EState::RecvStream);
378 if (State <= EState::RecvStream)
return MAX_uint32;
379 if (State > EState::RecvContent)
return 0;
393#if IAS_HTTP_WITH_PERF
394const FStopwatch& FActivity::GetStopwatch()
const
401FOutcome FActivity::Transact(FHttpPeer& Peer)
403 Transaction = Peer.Transact();
410 bool bKeepAlive =
TheHost->IsPooled();
415 Transaction->AddHeader(Key,
Value);
418 TransactId = Transaction->End(bKeepAlive);
420 ChangeState(EState::Send);
425FOutcome FActivity::Send(FHttpPeer& Peer)
427#if IAS_HTTP_WITH_PERF
433 FOutcome
Outcome = Transaction->TrySendRequest(Peer);
447#if IAS_HTTP_WITH_PERF
451 ChangeState(EState::RecvMessage);
456FOutcome FActivity::RecvMessage(FHttpPeer& Peer)
461#if IAS_HTTP_WITH_PERF
465 FOutcome
Outcome = Transaction->TryRecvResponse(Peer);
479 bool bChunked = Transaction->IsChunked();
480 int64 ContentLength = Transaction->GetContentLength();
485 if (bAllowChunked == 0)
492 else if (ContentLength < 0)
505 bHasBody &= ((ContentLength > 0) |
int32(Transaction->IsChunked())) ==
true;
508 ChangeState(EState::RecvDone);
527 else if (!bChunked &&
DestSize < ContentLength)
541 auto NextState = bChunked ? EState::RecvStream : EState::RecvContent;
542 ChangeState(NextState);
551 int64 Remaining = Transaction->GetRemaining();
556 FOutcome
Outcome = Transaction->TryRecv(View, Peer);
570#if IAS_HTTP_WITH_PERF
587 FOutcome
Outcome = Transaction->TryRecv(View, Peer);
617#if IAS_HTTP_WITH_PERF
630 check(State >= EState::RecvMessage && State < EState::RecvDone);
632 if (State == EState::RecvMessage)
return RecvMessage(Peer);
633 if (State == EState::RecvContent)
return RecvContent(Peer,
MaxRecvSize);
634 if (State == EState::RecvStream)
return RecvStream(Peer,
MaxRecvSize);
643 if (State == EState::Build)
652 if (State == EState::Send)
657 check(State > EState::Send && State < EState::RecvDone);
678 Builder <<
"Iax/Activity_";
679 Builder << (1ull << (i - 1));
721 if (Param ==
uint32(FActivity::EState::Build))
#define check(expr)
Definition AssertionMacros.h:314
#define UE_NONCOPYABLE(TypeName)
Definition CoreMiscDefines.h:457
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define TRACE_CPUPROFILER_EVENT_SCOPE(Name)
Definition CpuProfilerTrace.h:528
UE_API uint32 LaneTrace_NewScope(const FAnsiStringView &Name) LANETRACE_OFF_IMPL(1)
UE_API FLaneTrace * LaneEstate_Lookup(FLaneEstate *Estate, FLanePostcode Postcode) LANETRACE_OFF_IMPL(nullptr)
UE_API FLaneEstate * LaneEstate_New(const FLaneTraceSpec &Spec) LANETRACE_OFF_IMPL(nullptr)
UE_API void LaneEstate_Demolish(FLaneEstate *Estate, FLanePostcode Postcode) LANETRACE_OFF_IMPL()
UE_API void LaneTrace_Enter(FLaneTrace *Lane, uint32 ScopeId) LANETRACE_OFF_IMPL()
UE_API void LaneTrace_Change(FLaneTrace *Lane, uint32 ScopeId) LANETRACE_OFF_IMPL()
UE_API FLaneTrace * LaneEstate_Build(FLaneEstate *Estate, FLanePostcode Postcode) LANETRACE_OFF_IMPL(nullptr)
#define MAX_uint32
Definition NumericLimits.h:21
#define UE_ARRAY_COUNT(array)
Definition UnrealTemplate.h:212
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
uint32 Size
Definition VulkanMemory.cpp:4034
FMutableMemoryView GetMutableView()
Definition IoBuffer.h:44
uint64 GetSize() const
Definition IoBuffer.h:41
Definition LaneTrace.h:122
constexpr TMemoryView Left(uint64 InSize) const
Definition MemoryView.h:83
TMemoryView Right(uint64 InSize) const
Definition MemoryView.h:99
constexpr uint64 GetSize() const
Definition MemoryView.h:74
void Reset()
Definition StringBuilder.h:190
Definition StringBuilder.h:509
bool Equals(TStringView< OtherCharType > OtherView, ESearchCase::Type SearchCase=ESearchCase::CaseSensitive) const
Definition StringView.h:306
T * Alloc(uint32 Count=1)
Definition Misc.inl:433
const char * GetData() const
Definition Misc.inl:414
Definition ConnectionPool.inl:10
static FOutcome Ok(int32 Result=0)
Definition Misc.inl:113
static FOutcome Error(const char *Message, int32 Code=-1)
Definition Misc.inl:151
static FOutcome None()
Definition Misc.inl:80
Definition TransactionOne.inl:945
bool IsValid() const
Definition TransactionOne.inl:990
@ Trace
Definition NetTraceConfig.h:23
@ IgnoreCase
Definition CString.h:26
const TCHAR * Name
Definition OodleDataCompression.cpp:30
TArrayView< T > Slice(TArrayView< T > FullView, int32 SliceIndex, int32 SliceNum)
Definition AssetDataTagMap.cpp:613
Definition ExpressionParserTypes.h:21
ETrace
Definition Misc.inl:12
IOSTOREHTTPCLIENT_API const void * GetIaxTraceChannel()
Definition Misc.inl:49
uint32 FTransactId
Definition TransactionTwo.inl:9
UE_STRING_CLASS Result(Forward< LhsType >(Lhs), RhsLen)
Definition String.cpp.inl:732
U16 Index
Definition radfft.cpp:71
static uint64 Cycles64()
Definition AndroidPlatformTime.h:34
Definition Activity.inl:66
char * Buffer
Definition Activity.inl:70
uint32 ContentSizeEst
Definition Activity.inl:71
FAnsiStringView Path
Definition Activity.inl:68
FAnsiStringView Method
Definition Activity.inl:67
FHost * Host
Definition Activity.inl:69
bool bIsKeepAlive
Definition Activity.inl:73
bool bAllowChunked
Definition Activity.inl:74
uint16 BufferSize
Definition Activity.inl:72
Definition Activity.inl:64
void EnumerateHeaders(FResponse::FHeaderSink HeaderSink) const
Definition Activity.inl:346
void SetDestination(FIoBuffer *InDest)
Definition Activity.inl:232
FIoBuffer & GetContent() const
Definition Activity.inl:369
void Cancel()
Definition Activity.inl:238
FIoBuffer * Dest
Definition Activity.inl:150
friend void Trace(const FActivity *, ETrace, uint32)
EStage GetStage() const
Definition Activity.inl:293
EStage
Definition Activity.inl:78
const FTransactRef & GetTransaction() const
Definition Activity.inl:319
FAnsiStringView GetPath() const
Definition Activity.inl:333
FAnsiStringView GetMethod() const
Definition Activity.inl:327
FActivity(const FParams &Params)
Definition Activity.inl:171
void SetSink(FTicketSink &&InSink, UPTRINT Param)
Definition Activity.inl:225
UPTRINT GetSinkParam() const
Definition Activity.inl:363
FOutcome Tick(FHttpPeer &Peer, int32 *MaxRecvSize=nullptr)
Definition Activity.inl:641
FHost * Host
Definition Activity.inl:149
void Fail(const FOutcome &Outcome)
Definition Activity.inl:258
uint32 GetRemainingKiB() const
Definition Activity.inl:376
UPTRINT Error
Definition Activity.inl:151
FHost * GetHost() const
Definition Activity.inl:339
void AddHeader(FAnsiStringView Key, FAnsiStringView Value)
Definition Activity.inl:204
void Done()
Definition Activity.inl:250
FTransactId GetTransactId() const
Definition Activity.inl:312
FOutcome GetError() const
Definition Activity.inl:384