update: 添加 Loom 确保主线程运行数据计算
parent
bc703d1e12
commit
eb7b743146
|
|
@ -151,16 +151,20 @@ namespace Guru
|
||||||
{
|
{
|
||||||
if (adInfo == null) return;
|
if (adInfo == null) return;
|
||||||
|
|
||||||
// #1. ad_impression
|
// 在主线程中计算相关的收益值
|
||||||
OnAdImpression(adInfo);
|
Loom.QueueOnMainThread(() =>
|
||||||
|
{
|
||||||
|
// #1. ad_impression
|
||||||
|
OnAdImpression(adInfo);
|
||||||
|
|
||||||
// #2. tch_ad_rev_roas calculation
|
// #2. tch_ad_rev_roas calculation
|
||||||
double revenue = adInfo.Revenue;
|
double revenue = adInfo.Revenue;
|
||||||
CalcTaichi001Value(revenue);
|
CalcTaichi001Value(revenue);
|
||||||
CalcTaichi02Value(revenue);
|
CalcTaichi02Value(revenue);
|
||||||
|
|
||||||
// #3. Adjust ad_revenue
|
// #3. Adjust ad_revenue
|
||||||
AdjustService.TrackADRevenue(adInfo);
|
AdjustService.TrackADRevenue(adInfo);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,8 @@ namespace Guru
|
||||||
_isDebug = isDebug;
|
_isDebug = isDebug;
|
||||||
Analytics.InitAnalytics(); // 打点提前初始化
|
Analytics.InitAnalytics(); // 打点提前初始化
|
||||||
|
|
||||||
|
Loom.StartUp(); // 确保主线程开启
|
||||||
|
|
||||||
// 初始化 Fireabse 依赖
|
// 初始化 Fireabse 依赖
|
||||||
FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
|
FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
|
||||||
DependencyStatus = task.Result;
|
DependencyStatus = task.Result;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 165040f3e03c40af8056aa631888b730
|
||||||
|
timeCreated: 1712654380
|
||||||
|
|
@ -0,0 +1,153 @@
|
||||||
|
namespace Guru
|
||||||
|
{
|
||||||
|
using UnityEngine;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
public class Loom : MonoBehaviour
|
||||||
|
{
|
||||||
|
public static int maxThreads = 8;
|
||||||
|
static int numThreads;
|
||||||
|
|
||||||
|
private static Loom _current;
|
||||||
|
private int _count;
|
||||||
|
public static Loom Current
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
Initialize();
|
||||||
|
return _current;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Awake()
|
||||||
|
{
|
||||||
|
_current = this;
|
||||||
|
initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool initialized;
|
||||||
|
|
||||||
|
static void Initialize()
|
||||||
|
{
|
||||||
|
if (!initialized)
|
||||||
|
{
|
||||||
|
if (!Application.isPlaying)
|
||||||
|
return;
|
||||||
|
|
||||||
|
initialized = true;
|
||||||
|
var g = new GameObject("Loom");
|
||||||
|
_current = g.AddComponent<Loom>();
|
||||||
|
DontDestroyOnLoad(g); // 增加GO持久化
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Action> _actions = new List<Action>();
|
||||||
|
public struct DelayedQueueItem
|
||||||
|
{
|
||||||
|
public float time;
|
||||||
|
public Action action;
|
||||||
|
}
|
||||||
|
private List<DelayedQueueItem> _delayed = new List<DelayedQueueItem>();
|
||||||
|
|
||||||
|
List<DelayedQueueItem> _currentDelayed = new List<DelayedQueueItem>();
|
||||||
|
|
||||||
|
public static void QueueOnMainThread(Action action)
|
||||||
|
{
|
||||||
|
QueueOnMainThread(action, 0f);
|
||||||
|
}
|
||||||
|
public static void QueueOnMainThread(Action action, float time)
|
||||||
|
{
|
||||||
|
if (time != 0)
|
||||||
|
{
|
||||||
|
lock (Current._delayed)
|
||||||
|
{
|
||||||
|
Current._delayed.Add(new DelayedQueueItem { time = Time.time + time, action = action });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
lock (Current._actions)
|
||||||
|
{
|
||||||
|
Current._actions.Add(action);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Thread RunAsync(Action a)
|
||||||
|
{
|
||||||
|
Initialize();
|
||||||
|
while (numThreads >= maxThreads)
|
||||||
|
{
|
||||||
|
Thread.Sleep(1);
|
||||||
|
}
|
||||||
|
Interlocked.Increment(ref numThreads);
|
||||||
|
ThreadPool.QueueUserWorkItem(RunAction, a);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void RunAction(object action)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
((Action)action)();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Interlocked.Decrement(ref numThreads);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnDisable()
|
||||||
|
{
|
||||||
|
if (_current == this)
|
||||||
|
{
|
||||||
|
|
||||||
|
_current = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Action> _currentActions = new List<Action>();
|
||||||
|
|
||||||
|
// Update is called once per frame
|
||||||
|
void Update()
|
||||||
|
{
|
||||||
|
lock (_actions)
|
||||||
|
{
|
||||||
|
_currentActions.Clear();
|
||||||
|
_currentActions.AddRange(_actions);
|
||||||
|
_actions.Clear();
|
||||||
|
}
|
||||||
|
foreach (var a in _currentActions)
|
||||||
|
{
|
||||||
|
a();
|
||||||
|
}
|
||||||
|
lock (_delayed)
|
||||||
|
{
|
||||||
|
_currentDelayed.Clear();
|
||||||
|
_currentDelayed.AddRange(_delayed.Where(d => d.time <= Time.time));
|
||||||
|
foreach (var item in _currentDelayed)
|
||||||
|
_delayed.Remove(item);
|
||||||
|
}
|
||||||
|
foreach (var delayed in _currentDelayed)
|
||||||
|
{
|
||||||
|
delayed.action();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 请在主线程内调用启动逻辑
|
||||||
|
/// </summary>
|
||||||
|
public static void StartUp()
|
||||||
|
{
|
||||||
|
if (initialized || null != _current) return;
|
||||||
|
Initialize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e34dba6b5d6c4191a581f9ba57588e37
|
||||||
|
timeCreated: 1704679694
|
||||||
Loading…
Reference in New Issue