private void GetDependenciesForAssetsInResolver(HashSet <string> changedAssets, IAssetDependencyResolver resolver, Dictionary <string, FileToAssetNode> resultList, ProgressBase progress) { string resolverId = resolver.GetId(); foreach (string assetId in changedAssets) { string fileId = NodeDependencyLookupUtility.GetGuidFromAssetId(assetId); if (!resultList.ContainsKey(fileId)) { resultList.Add(fileId, new FileToAssetNode { FileId = fileId }); } FileToAssetNode fileToAssetNode = resultList[fileId]; AssetNode assetNode = fileToAssetNode.GetAssetNode(assetId); List <Dependency> dependencies = new List <Dependency>(); resolver.GetDependenciesForId(assetId, dependencies); AssetNode.ResolverData resolverData = assetNode.GetResolverData(resolverId); resolverData.Dependencies = dependencies; fileToAssetNode.GetResolverTimeStamp(resolverId).TimeStamp = NodeDependencyLookupUtility.GetTimeStampForFileId(fileId); } }
public static FileToAssetNode[] Deserialize(byte[] bytes) { int offset = 0; int numFileToAssetNodes = CacheSerializerUtils.DecodeShort(ref bytes, ref offset); FileToAssetNode[] fileToAssetNodes = new FileToAssetNode[numFileToAssetNodes]; for (int n = 0; n < numFileToAssetNodes; ++n) { string fileId = CacheSerializerUtils.DecodeString(ref bytes, ref offset); FileToAssetNode fileAssetNode = new FileToAssetNode { FileId = fileId }; int resolverTimeStampLength = CacheSerializerUtils.DecodeShort(ref bytes, ref offset); for (var i = 0; i < resolverTimeStampLength; i++) { FileToAssetNode.ResolverTimeStamp resolverTimeStamp = new FileToAssetNode.ResolverTimeStamp(); resolverTimeStamp.ResolverId = CacheSerializerUtils.DecodeString(ref bytes, ref offset); resolverTimeStamp.TimeStamp = CacheSerializerUtils.DecodeLong(ref bytes, ref offset); fileAssetNode.ResolverTimeStamps.Add(resolverTimeStamp); } int numAssetNodes = CacheSerializerUtils.DecodeShort(ref bytes, ref offset); for (var i = 0; i < numAssetNodes; i++) { string assetId = CacheSerializerUtils.DecodeString(ref bytes, ref offset); AssetNode assetNode = new AssetNode(assetId); int numResolverDatas = CacheSerializerUtils.DecodeShort(ref bytes, ref offset); for (int j = 0; j < numResolverDatas; ++j) { AssetNode.ResolverData data = new AssetNode.ResolverData(); data.ResolverId = CacheSerializerUtils.DecodeString(ref bytes, ref offset); data.Dependencies = CacheSerializerUtils.DecodeDependencies(ref bytes, ref offset); assetNode.ResolverDatas.Add(data); } fileAssetNode.AssetNodes.Add(assetNode); } fileToAssetNodes[n] = fileAssetNode; } string eof = CacheSerializerUtils.DecodeString(ref bytes, ref offset); if (!eof.Equals(EOF)) { Debug.LogError("AssetDependencyCache cache file to be corrupted. Rebuilding cache required"); return(new FileToAssetNode[0]); } return(fileToAssetNodes); }
private HashSet <string> GetChangedAssetIdsForResolver(IAssetDependencyResolver resolver, string[] pathes, long[] timestamps, FileToAssetNode[] fileToAssetNodes) { HashSet <string> result = new HashSet <string>(); Dictionary <string, FileToAssetNode> list = RelationLookup.RelationLookupBuilder.ConvertToDictionary(fileToAssetNodes); string id = resolver.GetId(); string progressBarTitle = $"AssetDependencyCache: {id}"; float lastDisplayedPercentage = 0; for (int i = 0; i < pathes.Length; ++i) { float progressPercentage = (float)i / pathes.Length; if (progressPercentage - lastDisplayedPercentage > 0.01f) { EditorUtility.DisplayProgressBar(progressBarTitle, $"Finding changed assets {result.Count}", (float)i / pathes.Length); lastDisplayedPercentage = progressPercentage; } string path = pathes[i]; string guid = AssetDatabase.AssetPathToGUID(path); if (!resolver.IsGuidValid(guid)) { continue; } if (list.ContainsKey(guid)) { FileToAssetNode fileToAssetNode = list[guid]; foreach (AssetNode assetNode in fileToAssetNode.AssetNodes) { assetNode.Existing = true; } if (fileToAssetNode.GetResolverTimeStamp(id).TimeStamp != timestamps[i]) { NodeDependencyLookupUtility.AddAssetsToList(result, path); } } else { NodeDependencyLookupUtility.AddAssetsToList(result, path); } } return(result); }
private bool CheckNeedsUpdateForResolver(IAssetDependencyResolver resolver, string[] pathes, long[] timestamps, FileToAssetNode[] fileToAssetNodes) { Dictionary <string, FileToAssetNode> list = RelationLookup.RelationLookupBuilder.ConvertToDictionary(fileToAssetNodes); string id = resolver.GetId(); string progressBarTitle = $"AssetDependencyCache: {id}"; for (int i = 0; i < pathes.Length; ++i) { EditorUtility.DisplayProgressBar(progressBarTitle, "Checking for required update", (float)i / pathes.Length); string path = pathes[i]; string guid = AssetDatabase.AssetPathToGUID(path); if (!resolver.IsGuidValid(guid)) { continue; } if (list.ContainsKey(guid)) { FileToAssetNode fileToAssetNode = list[guid]; foreach (AssetNode assetNode in fileToAssetNode.AssetNodes) { assetNode.Existing = true; } if (fileToAssetNode.GetResolverTimeStamp(id).TimeStamp != timestamps[i]) { return(true); } } else { return(true); } } return(false); }