You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2836261 on 2016/01/20 by Robert.Manuszewski@Robert.Manuszewski_NCL_Stream1
Flush FAsyncPackage cache after pre-load to reduce peak memory usage when async loading (5.5-10x).
Change 2828630 on 2016/01/14 by Robert.Manuszewski@Robert.Manuszewski_NCL_Stream1
Adding debug code to catch memory stomps in the async loading buffers that's independent from mallocstomp allocator. Changed the signature of PageProtect functions to be able to read-only protect memory.
Change 2816129 on 2016/01/05 by Steve.Robb@Dev-Core
Fixes for Realloc and alignment logic which caused redundant reallocations and incorrect binning.
Change 2821054 on 2016/01/08 by Steve.Robb@Dev-Core
Further Realloc savings when realigning within a block.
Change 2806820 on 2015/12/17 by Steve.Robb@Dev-Core
New AlignDown function, like Align, but which rounds a value/pointer down to the next alignment instead of up.
Change 2806816 on 2015/12/17 by Steve.Robb@Dev-Core
Sort UHT modules by type to improve iteration times in conjunction with makefiles.
Change 2823235 on 2016/01/11 by Steve.Robb@Dev-Core
UHT error messages about missing GENERATED_BODY() macros updated to represent intended use.
Change 2806815 on 2015/12/17 by Steve.Robb@Dev-Core
Module types split into Game and Engine runtime versions.
Change 2833809 on 2016/01/19 by Robert.Manuszewski@Robert.Manuszewski_NCL_Stream1
StaticLoadObject will now respect LOAD_NoRedirects flag.
Change 2811194 on 2015/12/22 by Bob.Tellez@Z2434_DevCore
#UE4 Prevent loading packages that have a newer LegacyFileVersion since serialization for FCustomVersion is not forward compatible. UE-24443
Change 2806818 on 2015/12/17 by Steve.Robb@Dev-Core
Removal of stats from MallocBinned2, to be readded later.
Change 2807069 on 2015/12/17 by Steve.Robb@Dev-Core
Clarification of some bucket hashing terminology.
Change 2815117 on 2016/01/04 by Steve.Robb@Dev-Core
Fix for a missing root build path on game modules.
Change 2815673 on 2016/01/05 by Steve.Robb@Dev-Core
Move FMalloc verification into a proxy object.
Change 2822873 on 2016/01/11 by Steve.Robb@Dev-Core
Fixes to off-by-one errors and removal of BinnedSizeLimit (assumed to be the same as MAX_POOLED_ALLOCATION_SIZE after OBO fix).
Change 2822923 on 2016/01/11 by Steve.Robb@Dev-Core
Simplification of MemSizeToPoolTable indexing.
Change 2824974 on 2016/01/12 by Steve.Robb@Dev-Core
Assert fixed.
AllocateBlockFromPool's return value made debuggable.
Change 2825241 on 2016/01/12 by Steve.Robb@Dev-Core
UHT now returns an error code on a warning when -warningsaserrors is specified.
Change 2825291 on 2016/01/12 by Steve.Robb@Dev-Core
WarningsAsErrors enabled on UHT, after disabling the hardcoded behavior in CL# 2825241.
Change 2829846 on 2016/01/15 by Steve.Robb@Dev-Core
GitHub #1938 - wrong Max value of enum is used during net serialization
Change 2829914 on 2016/01/15 by Robert.Manuszewski@Robert.Manuszewski_NCL_Stream1
Reduce the amount of memory allocated for async cache buffers when guarding against memory stomps.
Change 2829988 on 2016/01/15 by Steve.Robb@Dev-Core
Generalized large pool allocations.
More redundancy removed.
Change 2831935 on 2016/01/18 by Chris.Wood@Chris.Wood.StreamB
Added UserActivity property to crash description in CRP and CR website.
[OR-12043] - Phone Home where crashes occur - pass context info to Crash Reporter
DB column added to db-09 by ColinR matching this change.
Published to server on Jan 18th 2016
Change 2834003 on 2016/01/19 by Chris.Wood@Chris.Wood.StreamB
Added Linux to normal callstack parsing code on CR website
[UE-25527] - Linux CrashReporter is missing information
Published to server on Jan 19th 2016
Change 2835466 on 2016/01/20 by Joe.Conley@Joe.Conley_EGJWD5708_Dev-Core-Minimal
Fix issue for cancelling package loads when there are still packages queued. Call their PackageLoadedDelegate with a "Cancelled" result.
Should solve remaining issue with UE-24062 - "Calling CancelAsyncLoading triggers an assert in FAsyncPackage::DetachLinker()"
- (ULevelStreaming::AsyncLevelLoadComplete was not being called if packages were still queued when cancel was issued)
Change 2836803 on 2016/01/20 by Chris.Wood@Chris.Wood.StreamB
CrashReportWebsite - fix exception thrown when parsing certain callstack formats
Change 2837952 on 2016/01/21 by Robert.Manuszewski@Robert.Manuszewski_NCL_Stream1
Changing FAsyncIORequest to be stored as reference when cancelling IO requests to improve performance.
Change 2838289 on 2016/01/21 by Robert.Manuszewski@Robert.Manuszewski_NCL_Stream1
[CL 2845588 by Robert Manuszewski in Main branch]
144 lines
4.2 KiB
C++
144 lines
4.2 KiB
C++
// Copyright 1998-2016 Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "ProfilerPrivatePCH.h"
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
IDataProvider
|
|
-----------------------------------------------------------------------------*/
|
|
|
|
void IDataProvider::InternalDuplicate( const IDataProviderRef& DataProvider, const uint32 FrameStartIndex, const uint32 FrameEndIndex ) const
|
|
{
|
|
for( uint32 FrameIdx = FrameStartIndex; FrameIdx < FrameEndIndex; FrameIdx++ )
|
|
{
|
|
const uint32 SampleStartIndex = GetSamplesIndicesForFrame( FrameIdx ).X;
|
|
const uint32 SampleEndIndex = GetSamplesIndicesForFrame( FrameIdx ).Y;
|
|
|
|
for( uint32 SampleIndex = SampleStartIndex; SampleIndex < SampleEndIndex; SampleIndex++ )
|
|
{
|
|
FProfilerSample ProfilerSample( GetCollection()[ SampleIndex ] );
|
|
|
|
for( int32 ChildIdx = 0; ChildIdx < ProfilerSample._ChildrenIndices.Num(); ChildIdx++ )
|
|
{
|
|
ProfilerSample._ChildrenIndices[ChildIdx] -= SampleStartIndex;
|
|
}
|
|
|
|
DataProvider->AddDuplicatedSample( ProfilerSample );
|
|
}
|
|
DataProvider->AdvanceFrame( GetFrameTimeMS( FrameIdx ) );
|
|
}
|
|
}
|
|
|
|
const uint32 IDataProvider::AdvanceFrame( const float DeltaTimeMS )
|
|
{
|
|
if( !bHasAddedSecondStartMarker )
|
|
{
|
|
bHasAddedSecondStartMarker = true;
|
|
|
|
// Add the default values.
|
|
FrameCounters.Add( LastSecondFrameCounter );
|
|
AccumulatedFrameCounters.Add( GetNumFrames() );
|
|
}
|
|
|
|
ElapsedTimeMS += DeltaTimeMS;
|
|
LastSecondFrameTimeMS += DeltaTimeMS;
|
|
|
|
LastSecondFrameCounter ++;
|
|
|
|
const uint32 SampleEndIndex = GetNumSamples();
|
|
FrameIndices.Add( FIntPoint( FrameIndex, SampleEndIndex ) );
|
|
|
|
FrameTimes.Add( DeltaTimeMS );
|
|
ElapsedFrameTimes.Add( ElapsedTimeMS );
|
|
|
|
// Update the values.
|
|
FrameCounters.Last() = LastSecondFrameCounter;
|
|
AccumulatedFrameCounters.Last() = GetNumFrames();
|
|
|
|
int NumLongFrames = 0;
|
|
while( LastSecondFrameTimeMS > 1000.0f )
|
|
{
|
|
if( NumLongFrames > 0 )
|
|
{
|
|
// Add the default values.
|
|
FrameCounters.Add( LastSecondFrameCounter );
|
|
AccumulatedFrameCounters.Add( GetNumFrames() );
|
|
}
|
|
|
|
LastSecondFrameTimeMS -= 1000.0f;
|
|
bHasAddedSecondStartMarker = false;
|
|
LastSecondFrameCounter = 0;
|
|
NumLongFrames ++;
|
|
}
|
|
|
|
FrameIndex = SampleEndIndex;
|
|
return FrameIndex;
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------------
|
|
FArrayDataProvider
|
|
-----------------------------------------------------------------------------*/
|
|
|
|
const uint32 FArrayDataProvider::AddHierarchicalSample
|
|
(
|
|
const uint32 InThreadID,
|
|
const uint32 InGroupID,
|
|
const uint32 InStatID,
|
|
const uint32 InDurationCycles,
|
|
const uint32 InCallsPerFrame,
|
|
const uint32 InParentIndex /*= FProfilerSample::InvalidIndex */
|
|
)
|
|
{
|
|
uint32 HierSampleIndex = Collection.Num();
|
|
FProfilerSample HierarchicalSample( InThreadID, InGroupID, InStatID, InDurationCycles, InCallsPerFrame );
|
|
|
|
Collection.AddElement( HierarchicalSample );
|
|
|
|
if( FProfilerSample::IsIndexValid( InParentIndex ) )
|
|
{
|
|
FProfilerSample& Parent = Collection[ InParentIndex ];
|
|
const uint32 InitialMemUsage = Parent.ChildrenIndices().GetAllocatedSize();
|
|
Parent.AddChild( HierSampleIndex );
|
|
const uint32 AccumulatedMemoryUsage = Parent.ChildrenIndices().GetAllocatedSize() - InitialMemUsage;
|
|
ChildrenIndicesMemoryUsage += AccumulatedMemoryUsage;
|
|
}
|
|
|
|
return HierSampleIndex;
|
|
}
|
|
|
|
void FArrayDataProvider::AddCounterSample
|
|
(
|
|
const uint32 InGroupID,
|
|
const uint32 InStatID,
|
|
const double InCounter,
|
|
const EProfilerSampleTypes::Type InProfilerSampleType
|
|
)
|
|
{
|
|
FProfilerSample CounterSample( InGroupID, InStatID, InCounter, InProfilerSampleType );
|
|
Collection.AddElement( CounterSample );
|
|
}
|
|
|
|
const uint32 FArrayDataProvider::AddDuplicatedSample( const FProfilerSample& ProfilerSample )
|
|
{
|
|
uint32 DuplicateSampleIndex = Collection.Num();
|
|
Collection.AddElement( ProfilerSample );
|
|
return DuplicateSampleIndex;
|
|
}
|
|
|
|
const uint32 FArrayDataProvider::GetNumSamples() const
|
|
{
|
|
return Collection.Num();
|
|
}
|
|
|
|
const SIZE_T FArrayDataProvider::GetMemoryUsage() const
|
|
{
|
|
SIZE_T MemoryUsage = FrameTimes.GetAllocatedSize();
|
|
MemoryUsage += FrameIndices.GetAllocatedSize();
|
|
MemoryUsage += ElapsedFrameTimes.GetAllocatedSize();
|
|
MemoryUsage += FrameCounters.GetAllocatedSize();
|
|
MemoryUsage += AccumulatedFrameCounters.GetAllocatedSize();
|
|
|
|
MemoryUsage += Collection.GetAllocatedSize();
|
|
MemoryUsage += ChildrenIndicesMemoryUsage;
|
|
return MemoryUsage;
|
|
}
|