Parcourir la source

Refactor: Refactoring binary serializer to use streams

BearishSun il y a 6 ans
Parent
commit
0bf35259fd

+ 11 - 16
Source/EditorCore/Scene/BsSerializedSceneObject.cpp

@@ -2,13 +2,16 @@
 //**************** Copyright (c) 2019 Marko Pintera ([email protected]). All rights reserved. **********************//
 #include "Scene/BsSerializedSceneObject.h"
 #include "Scene/BsSceneObject.h"
-#include "Serialization/BsMemorySerializer.h"
 #include "Utility/BsUtility.h"
+#include "Serialization/BsBinarySerializer.h"
+#include "FileSystem/BsDataStream.h"
 
 namespace bs
 {
+	class BinarySerializer;
+
 	SerializedSceneObject::SerializedSceneObject(const HSceneObject& sceneObject, bool hierarchy)
-		:mSceneObject(sceneObject), mRecordHierarchy(hierarchy)
+		:mSceneObject(sceneObject), mRecordHierarchy(hierarchy), mSerializedObject(bs_shared_ptr_new<MemoryDataStream>())
 	{
 		if(mSceneObject.isDestroyed())
 			return;
@@ -31,9 +34,9 @@ namespace bs
 		bool isInstantiated = !mSceneObject->hasFlag(SOF_DontInstantiate);
 		mSceneObject->_setFlags(SOF_DontInstantiate);
 
-		MemorySerializer serializer;
-		mSerializedObject = serializer.encode(mSceneObject.get(), mSerializedObjectSize);
-
+		BinarySerializer serializer;
+		serializer.encode(mSceneObject.get(), mSerializedObject);
+		
 		if (isInstantiated)
 			mSceneObject->_unsetFlags(SOF_DontInstantiate);
 
@@ -52,15 +55,6 @@ namespace bs
 		}
 	}
 
-	SerializedSceneObject::~SerializedSceneObject()
-	{
-		if (mSerializedObject != nullptr)
-		{
-			bs_free(mSerializedObject);
-			mSerializedObject = nullptr;
-		}
-	}
-
 	void SerializedSceneObject::restore()
 	{
 		HSceneObject parent;
@@ -90,9 +84,10 @@ namespace bs
 		CoreSerializationContext serzContext;
 		serzContext.goState = bs_shared_ptr_new<GameObjectDeserializationState>(GODM_RestoreExternal | GODM_UseNewIds);
 
-		MemorySerializer serializer;
+		BinarySerializer serializer;
+		mSerializedObject->seek(0);
 		SPtr<SceneObject> restored = std::static_pointer_cast<SceneObject>(
-			serializer.decode(mSerializedObject, mSerializedObjectSize, &serzContext));
+			serializer.decode(mSerializedObject, (UINT32)mSerializedObject->size(), &serzContext));
 
 		EditorUtility::restoreIds(restored->getHandle(), mSceneObjectProxy);
 		restored->setParent(parent);

+ 3 - 4
Source/EditorCore/Scene/BsSerializedSceneObject.h

@@ -4,6 +4,7 @@
 
 #include "BsEditorPrerequisites.h"
 #include "Utility/BsEditorUtility.h"
+#include "FileSystem/BsDataStream.h"
 
 namespace bs
 {
@@ -28,7 +29,6 @@ namespace bs
 		 */
 		BS_SCRIPT_EXPORT()
 		SerializedSceneObject(const HSceneObject& sceneObject, bool hierarchy = false);
-		~SerializedSceneObject();
 
 		/**
 		 * Restores the scene object to the state as it was when this object was created. If the scene object was deleted
@@ -44,10 +44,9 @@ namespace bs
 		EditorUtility::SceneObjProxy mSceneObjectProxy;
 		bool mRecordHierarchy;
 
-		UINT8* mSerializedObject = nullptr;
-		UINT32 mSerializedObjectSize = 0;
+		SPtr<MemoryDataStream> mSerializedObject;
 		UINT64 mSerializedObjectParentId = 0;
 	};
 
 	/** @} */
-}
+}

+ 0 - 1
Source/EditorCore/Testing/BsEditorTestSuite.cpp

@@ -7,7 +7,6 @@
 #include "Reflection/BsRTTIType.h"
 #include "Private/RTTI/BsGameObjectRTTI.h"
 #include "Serialization/BsBinarySerializer.h"
-#include "Serialization/BsMemorySerializer.h"
 #include "Serialization/BsBinaryDiff.h"
 #include "Scene/BsPrefab.h"
 #include "Resources/BsResources.h"

+ 0 - 1
Source/EditorCore/UndoRedo/BsCmdDeleteSO.cpp

@@ -4,7 +4,6 @@
 #include "UndoRedo/BsUndoRedo.h"
 #include "Scene/BsSceneObject.h"
 #include "Scene/BsSerializedSceneObject.h"
-#include "Serialization/BsMemorySerializer.h"
 #include "Scene/BsSelection.h"
 
 namespace bs

+ 10 - 5
Source/EditorScript/BsManagedEditorCommand.cpp

@@ -8,8 +8,9 @@
 #include "BsMonoManager.h"
 #include "BsMonoUtil.h"
 #include "Serialization/BsScriptAssemblyManager.h"
-#include "Serialization/BsMemorySerializer.h"
 #include "Serialization/BsManagedSerializableObject.h"
+#include "Serialization/BsBinarySerializer.h"
+#include "FileSystem/BsDataStream.h"
 
 namespace bs
 {
@@ -156,8 +157,12 @@ namespace bs
 
 			if (serializableObject != nullptr)
 			{
-				MemorySerializer ms;
-				backupData.data = ms.encode(serializableObject.get(), backupData.size);
+				SPtr<MemoryDataStream> stream = bs_shared_ptr_new<MemoryDataStream>();
+				BinarySerializer bs;
+				bs.encode(serializableObject.get(), stream);
+
+				backupData.size = (UINT32)stream->size();
+				backupData.data = stream->disownMemory();
 			}
 		}
 
@@ -168,9 +173,9 @@ namespace bs
 	{
 		const RawBackupData& data = any_cast_ref<RawBackupData>(backupData.data);
 
-		MemorySerializer ms;
+		BinarySerializer bs;
 		SPtr<ManagedSerializableObject> serializableObject = std::static_pointer_cast<ManagedSerializableObject>(
-			ms.decode(data.data, data.size));
+			bs.decode(bs_shared_ptr_new<MemoryDataStream>(data.data, data.size), data.size));
 
 		if(!mTypeMissing)
 		{

+ 8 - 5
Source/EditorScript/Wrappers/BsScriptProjectSettings.cpp

@@ -11,7 +11,8 @@
 #include "Reflection/BsRTTIType.h"
 #include "Serialization/BsScriptAssemblyManager.h"
 #include "Settings/BsEditorSettings.h"
-#include "Serialization/BsMemorySerializer.h"
+#include "Serialization/BsBinarySerializer.h"
+#include "FileSystem/BsDataStream.h"
 
 namespace bs
 {
@@ -154,11 +155,13 @@ namespace bs
 
 			// Make a copy of the object as deserialization modifies the object in-place (in particular in can create
 			// GC handles, which would then not get released on a potential assembly refresh)
-			MemorySerializer ms;
+			BinarySerializer bs;
 
-			UINT32 size = 0;
-			UINT8* encodedData = ms.encode(managedSerializableObject.get(), size);
-			SPtr<ManagedSerializableObject> clone = std::static_pointer_cast<ManagedSerializableObject>(ms.decode(encodedData, size));
+			SPtr<MemoryDataStream> stream = bs_shared_ptr_new<MemoryDataStream>();
+			bs.encode(managedSerializableObject.get(), stream);
+
+			stream->seek(0);
+			SPtr<ManagedSerializableObject> clone = std::static_pointer_cast<ManagedSerializableObject>(bs.decode(stream, (UINT32)stream->size()));
 
 			return clone->deserialize();
 		}

+ 1 - 1
Source/bsf

@@ -1 +1 @@
-Subproject commit 7ff314c50397bb77940fd31f8d7bd3c4e27e8609
+Subproject commit 922dfa755a37803a0fda66ae6e535d69775e164c