Skip to content

Commit

Permalink
[refactor]:重构任务系统,将合并任务的条件加上同类型
Browse files Browse the repository at this point in the history
  • Loading branch information
CatImmortal committed Feb 2, 2023
1 parent 3a38e88 commit b61dff0
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 24 deletions.
4 changes: 2 additions & 2 deletions Assets/CatAsset/Runtime/CatAssetManager.Load.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ public static partial class CatAssetManager
/// </summary>
public static void AddLoadSceneTask(string sceneName,SceneHandler handler,TaskPriority priority)
{
LoadSceneTask task = LoadSceneTask.Create(taskRunner, sceneName, handler);
taskRunner.AddTask(task, priority);
LoadSceneTask task = LoadSceneTask.Create(loadTaskRunner, sceneName, handler);
loadTaskRunner.AddTask(task, priority);

handler.Task = task;
}
Expand Down
12 changes: 6 additions & 6 deletions Assets/CatAsset/Runtime/CatAssetManager.Task.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ public static partial class CatAssetManager
/// </summary>
public static void AddWebRequestTask(string name, string uri, WebRequestedCallback callback,TaskPriority priority)
{
WebRequestTask task = WebRequestTask.Create(taskRunner, name, uri, callback);
taskRunner.AddTask(task, priority);
WebRequestTask task = WebRequestTask.Create(loadTaskRunner, name, uri, callback);
loadTaskRunner.AddTask(task, priority);
}

/// <summary>
Expand All @@ -20,8 +20,8 @@ public static void AddWebRequestTask(string name, string uri, WebRequestedCallba
public static void AddLoadBundledAssetTask(string assetName,Type assetType,AssetHandler handler,TaskPriority priority)
{
LoadBundledAssetTask loadBundledAssetTask =
LoadBundledAssetTask.Create(taskRunner, assetName, assetType, handler);
taskRunner.AddTask(loadBundledAssetTask, priority);
LoadBundledAssetTask.Create(loadTaskRunner, assetName, assetType, handler);
loadTaskRunner.AddTask(loadBundledAssetTask, priority);

handler.Task = loadBundledAssetTask;
}
Expand All @@ -32,8 +32,8 @@ public static void AddLoadBundledAssetTask(string assetName,Type assetType,Asset
public static void AddLoadRawAssetTask(string assetName,AssetCategory category,AssetHandler handler,TaskPriority priority)
{
LoadRawAssetTask loadRawAssetTask =
LoadRawAssetTask.Create(taskRunner, assetName, category, handler);
taskRunner.AddTask(loadRawAssetTask, priority);
LoadRawAssetTask.Create(loadTaskRunner, assetName, category, handler);
loadTaskRunner.AddTask(loadRawAssetTask, priority);

handler.Task = loadRawAssetTask;
}
Expand Down
8 changes: 4 additions & 4 deletions Assets/CatAsset/Runtime/CatAssetManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public static partial class CatAssetManager
/// <summary>
/// 加载相关任务运行器
/// </summary>
private static TaskRunner taskRunner = new TaskRunner();
private static TaskRunner loadTaskRunner = new TaskRunner();

/// <summary>
/// 卸载相关任务运行器
Expand Down Expand Up @@ -67,7 +67,7 @@ public static int MaxTaskRunCount
{
set
{
taskRunner.MaxRunCount = value;
loadTaskRunner.MaxRunCount = value;
downloadTaskRunner.MaxRunCount = value;
}
}
Expand Down Expand Up @@ -112,14 +112,14 @@ static CatAssetManager()
public static void Update()
{
//每帧开始轮询前 清空计数
taskRunner.PreUpdate();
loadTaskRunner.PreUpdate();
unloadTaskRunner.PreUpdate();
downloadTaskRunner.PreUpdate();

//按优先级轮询任务组
for (int i = 0; i < priorityNum; i++)
{
taskRunner.Update(i);
loadTaskRunner.Update(i);
unloadTaskRunner.Update(i);
downloadTaskRunner.Update(i);
}
Expand Down
9 changes: 6 additions & 3 deletions Assets/CatAsset/Runtime/Database/CatAssetDatabase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -433,10 +433,13 @@ private static void BuildProfilerTaskInfo(ProfilerInfo info)
{
foreach (var pair2 in pair.Value)
{
var task = pair2.Value;
foreach (var pair3 in pair2.Value)
{
var task = pair3.Value;

ProfilerTaskInfo pti = ProfilerTaskInfo.Create(task.Name,task.GetType().Name,task.State,task.Progress,task.MergedTaskCount);
info.TaskInfoList.Add(pti);
ProfilerTaskInfo pti = ProfilerTaskInfo.Create(task.Name,task.GetType().Name,task.State,task.Progress,task.MergedTaskCount);
info.TaskInfoList.Add(pti);
}
}
}
info.TaskInfoList.Sort();
Expand Down
2 changes: 1 addition & 1 deletion Assets/CatAsset/Runtime/TaskSystem/TaskGroup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ public bool Run()
case TaskState.Finished:
//任务运行结束 需要删除
RemoveTask(task);
TaskRunner.MainTaskDict[task.Owner].Remove(task.Name);
TaskRunner.MainTaskDict[task.Owner][task.GetType()].Remove(task.Name);
ReferencePool.Release(task);
break;
};
Expand Down
23 changes: 15 additions & 8 deletions Assets/CatAsset/Runtime/TaskSystem/TaskRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ public class TaskRunner
/// <summary>
/// 任务运行器->(任务名->主任务)
/// </summary>
internal static readonly Dictionary<TaskRunner, Dictionary<string, BaseTask>> MainTaskDict =
new Dictionary<TaskRunner, Dictionary<string, BaseTask>>();
internal static readonly Dictionary<TaskRunner, Dictionary<Type, Dictionary<string, BaseTask>>> MainTaskDict =
new Dictionary<TaskRunner, Dictionary<Type, Dictionary<string, BaseTask>>>();

/// <summary>
/// 任务组列表
Expand Down Expand Up @@ -52,15 +52,22 @@ public TaskRunner()
/// </summary>
public void AddTask(BaseTask task, TaskPriority priority)
{
if (!MainTaskDict.TryGetValue(task.Owner,out Dictionary<string, BaseTask> dict))
if (!MainTaskDict.TryGetValue(task.Owner,out var typeDict))
{
dict = new Dictionary<string, BaseTask>();
MainTaskDict.Add(task.Owner,dict);
typeDict = new Dictionary<Type, Dictionary<string, BaseTask>>();
MainTaskDict.Add(task.Owner,typeDict);
}

if (dict.TryGetValue(task.Name,out BaseTask mainTask))
Type type = task.GetType();
if (!typeDict.TryGetValue(type,out var NameDict))
{
//合并同名任务到主任务里
NameDict = new Dictionary<string, BaseTask>();
typeDict.Add(type,NameDict);
}

if (NameDict.TryGetValue(task.Name,out BaseTask mainTask))
{
//合并同类型同名任务到主任务里
mainTask.MergeTask(task);

if ((int)priority > (int)mainTask.Group.Priority)
Expand All @@ -71,7 +78,7 @@ public void AddTask(BaseTask task, TaskPriority priority)
}
else
{
dict.Add(task.Name,task);
NameDict.Add(task.Name,task);
taskGroups[(int)priority].AddTask(task);
}
}
Expand Down

0 comments on commit b61dff0

Please sign in to comment.