207 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
		
		
			
		
	
	
			207 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| 
								 | 
							
								require "UnLua"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								local UnLuaPerformanceTestProxy = Class()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function UnLuaPerformanceTestProxy:ReceiveBeginPlay()
							 | 
						||
| 
								 | 
							
									local N = 1000000
							 | 
						||
| 
								 | 
							
									local Multiplier = 1000000000.0 / N
							 | 
						||
| 
								 | 
							
									local RawObject = self.Object
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									-- warm up
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										self:NOP()
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									local StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										local MeshID = RawObject.MeshID
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									local EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									local Message = "read int32 ; " .. tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										RawObject.MeshID = i
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" ..  "write int32 ; " .. tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										local MeshName = RawObject.MeshName
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" ..  "read FString ; " .. tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										RawObject.MeshName = "9527"
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" ..  "write FString ; " .. tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										local COM = RawObject.COM
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" ..  "read FVector ; " .. tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									local COM = UE4.FVector(1.0, 1.0, 1.0)
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										RawObject.COM = COM
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" ..  "write FVector ; " .. tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										local Positions = RawObject.Positions
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" ..  "read TArray<FVector> ; " .. tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									local PredictedPositions = UE4.TArray(UE4.FVector)
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										RawObject.PredictedPositions = PredictedPositions
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" ..  "write TArray<FVector> ; " .. tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										self:NOP()
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" ..  "void NOP() ; " .. tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										self:Simulate(0.0167)
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" .. "void Simulate(float) ; "..tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										local MeshID = self:GetMeshID()
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" .. "int32 GetMeshID() const ; "..tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										local MeshName = self:GetMeshName()
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" .. "const FString& GetMeshName() const ; "..tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										self:GetCOM(COM)
							 | 
						||
| 
								 | 
							
										--local COMCopy = self:GetCOM(COM)
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" .. "const FVector& GetCOM() const ; "..tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										local NewMeshID = self:UpdateMeshID(1024)
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" .. "int32 UpdateMeshID(int32) ; "..tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										local NewMeshName = self:UpdateMeshName("1024")
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" .. "FString UpdateMeshName(const FString&) ; "..tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									local Origin = UE4.FVector(1.0, 1.0, 1.0)
							 | 
						||
| 
								 | 
							
									local Direction = UE4.FVector(1.0, 0.0, 0.0)
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										local bHit = self:Raycast(Origin, Direction)
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" .. "bool Raycast(const FVector&, const FVector&) const ; "..tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									local Indices = UE4.TArray(0)
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										self:GetIndices(Indices)
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" .. "void GetIndices(TArray<int32>&) const ; "..tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									for i=1, 1024 do
							 | 
						||
| 
								 | 
							
										Indices:Add(i)
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										self:GetIndices(Indices)
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" .. "void GetIndices(TArray<int32>&) const with 1024 items ; "..tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										self:UpdateIndices(Indices)
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" .. "void UpdateIndices(const TArray<int32>&) ; "..tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									local Positions = UE4.TArray(UE4.FVector)
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										self:GetPositions(Positions)
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" .. "void GetPositions(TArray<FVector>&) const ; "..tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									for i=1, 1024 do
							 | 
						||
| 
								 | 
							
										Positions:Add(UE4.FVector(i, i, i))
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										self:GetPositions(Positions)
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" .. "void GetPositions(TArray<FVector>&) const with 1024 items ; "..tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										self:UpdatePositions(Positions)
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" .. "void UpdatePositions(const TArray<FVector>&) ; "..tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										self:GetPredictedPositions(PredictedPositions)
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" .. "const TArray<FVector>& GetPredictedPositions() const ; "..tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										local ID, Name, bResult = self:GetMeshInfo(0, "", COM, Indices, Positions, PredictedPositions)
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" .. "bool GetMeshInfo(int32&, FString&, FVector&, TArray<int32>&, TArray<FVector>&, TArray<FVector>&) const ; "..tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									StartTime = Seconds()
							 | 
						||
| 
								 | 
							
									for i=1, N do
							 | 
						||
| 
								 | 
							
										local HitResult = UE4.FHitResult()
							 | 
						||
| 
								 | 
							
									end
							 | 
						||
| 
								 | 
							
									EndTime = Seconds()
							 | 
						||
| 
								 | 
							
									Message = Message .. "\n" .. "FHitResult() ; "..tostring((EndTime - StartTime) * Multiplier)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									LogPerformanceData(Message)
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								return UnLuaPerformanceTestProxy
							 |