change threading on GetTexture and GetMesh NonSharable region modules
parent
c0e920c1ad
commit
f16d36627f
|
@ -57,8 +57,10 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
// LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
private Scene m_scene;
|
private Scene m_scene;
|
||||||
|
private string m_SceneName = "";
|
||||||
private IAssetService m_AssetService;
|
private IAssetService m_AssetService;
|
||||||
private bool m_Enabled = true;
|
private bool m_Enabled = true;
|
||||||
|
private bool m_IsRunning = false;
|
||||||
private string m_URL;
|
private string m_URL;
|
||||||
|
|
||||||
private string m_URL2;
|
private string m_URL2;
|
||||||
|
@ -87,7 +89,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
private IAssetService m_assetService = null;
|
private IAssetService m_assetService = null;
|
||||||
|
|
||||||
private Dictionary<UUID, string> m_capsDict = new Dictionary<UUID, string>();
|
private Dictionary<UUID, string> m_capsDict = new Dictionary<UUID, string>();
|
||||||
private static Thread[] m_workerThreads = null;
|
private Thread[] m_workerThreads = null;
|
||||||
|
|
||||||
private static OpenMetaverse.BlockingQueue<aPollRequest> m_queue =
|
private static OpenMetaverse.BlockingQueue<aPollRequest> m_queue =
|
||||||
new OpenMetaverse.BlockingQueue<aPollRequest>();
|
new OpenMetaverse.BlockingQueue<aPollRequest>();
|
||||||
|
@ -97,13 +99,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
#region Region Module interfaceBase Members
|
#region Region Module interfaceBase Members
|
||||||
|
|
||||||
~GetMeshModule()
|
|
||||||
{
|
|
||||||
foreach (Thread t in m_workerThreads)
|
|
||||||
Watchdog.AbortThread(t.ManagedThreadId);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public Type ReplaceableInterface
|
public Type ReplaceableInterface
|
||||||
{
|
{
|
||||||
get { return null; }
|
get { return null; }
|
||||||
|
@ -167,6 +162,9 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
m_scene.EventManager.OnDeregisterCaps += DeregisterCaps;
|
m_scene.EventManager.OnDeregisterCaps += DeregisterCaps;
|
||||||
m_scene.EventManager.OnThrottleUpdate += ThrottleUpdate;
|
m_scene.EventManager.OnThrottleUpdate += ThrottleUpdate;
|
||||||
|
|
||||||
|
m_IsRunning = true;
|
||||||
|
m_SceneName = m_scene.Name;
|
||||||
|
|
||||||
if (m_workerThreads == null)
|
if (m_workerThreads == null)
|
||||||
{
|
{
|
||||||
m_workerThreads = new Thread[2];
|
m_workerThreads = new Thread[2];
|
||||||
|
@ -174,7 +172,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
for (uint i = 0; i < 2; i++)
|
for (uint i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
m_workerThreads[i] = WorkManager.StartThread(DoMeshRequests,
|
m_workerThreads[i] = WorkManager.StartThread(DoMeshRequests,
|
||||||
String.Format("MeshWorkerThread{0}", i),
|
String.Format("GetMeshWorker[{0}]{1}",m_SceneName, i),
|
||||||
ThreadPriority.Normal,
|
ThreadPriority.Normal,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
|
@ -182,11 +180,19 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
int.MaxValue);
|
int.MaxValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Close()
|
||||||
public void Close() { }
|
{
|
||||||
|
if(m_IsRunning && m_workerThreads != null)
|
||||||
|
{
|
||||||
|
m_log.DebugFormat("[GetMeshModule] Closing{0}", m_SceneName);
|
||||||
|
m_IsRunning = false;
|
||||||
|
foreach (Thread t in m_workerThreads)
|
||||||
|
Watchdog.AbortThread(t.ManagedThreadId);
|
||||||
|
}
|
||||||
|
m_queue.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
public string Name { get { return "GetMeshModule"; } }
|
public string Name { get { return "GetMeshModule"; } }
|
||||||
|
|
||||||
|
@ -194,10 +200,10 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
private void DoMeshRequests()
|
private void DoMeshRequests()
|
||||||
{
|
{
|
||||||
while (true)
|
while (m_IsRunning)
|
||||||
{
|
{
|
||||||
aPollRequest poolreq = m_queue.Dequeue();
|
aPollRequest poolreq = m_queue.Dequeue();
|
||||||
|
Watchdog.UpdateThread();
|
||||||
poolreq.thepoll.Process(poolreq);
|
poolreq.thepoll.Process(poolreq);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -386,7 +392,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
private volatile int BytesSent = 0;
|
private volatile int BytesSent = 0;
|
||||||
private int Lod3 = 0;
|
private int Lod3 = 0;
|
||||||
private int Lod2 = 0;
|
private int Lod2 = 0;
|
||||||
private int Lod1 = 0;
|
// private int Lod1 = 0;
|
||||||
private int UserSetThrottle = 0;
|
private int UserSetThrottle = 0;
|
||||||
private int UDPSetThrottle = 0;
|
private int UDPSetThrottle = 0;
|
||||||
private int CapSetThrottle = 0;
|
private int CapSetThrottle = 0;
|
||||||
|
@ -501,7 +507,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
{
|
{
|
||||||
Lod3 = 0;
|
Lod3 = 0;
|
||||||
Lod2 = 0;
|
Lod2 = 0;
|
||||||
Lod1 = 0;
|
// Lod1 = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -534,6 +540,5 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,7 +75,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
private IAssetService m_assetService = null;
|
private IAssetService m_assetService = null;
|
||||||
|
|
||||||
private Dictionary<UUID, string> m_capsDict = new Dictionary<UUID, string>();
|
private Dictionary<UUID, string> m_capsDict = new Dictionary<UUID, string>();
|
||||||
private static Thread[] m_workerThreads = null;
|
private Thread[] m_workerThreads = null;
|
||||||
|
|
||||||
private string m_Url = "localhost";
|
private string m_Url = "localhost";
|
||||||
|
|
||||||
|
@ -84,7 +84,8 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
private Dictionary<UUID,PollServiceTextureEventArgs> m_pollservices = new Dictionary<UUID,PollServiceTextureEventArgs>();
|
private Dictionary<UUID,PollServiceTextureEventArgs> m_pollservices = new Dictionary<UUID,PollServiceTextureEventArgs>();
|
||||||
|
|
||||||
|
private bool m_IsRunning = false;
|
||||||
|
private string m_SceneName = "";
|
||||||
#region ISharedRegionModule Members
|
#region ISharedRegionModule Members
|
||||||
|
|
||||||
public void Initialise(IConfigSource source)
|
public void Initialise(IConfigSource source)
|
||||||
|
@ -128,6 +129,9 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
m_scene.EventManager.OnDeregisterCaps += DeregisterCaps;
|
m_scene.EventManager.OnDeregisterCaps += DeregisterCaps;
|
||||||
m_scene.EventManager.OnThrottleUpdate += ThrottleUpdate;
|
m_scene.EventManager.OnThrottleUpdate += ThrottleUpdate;
|
||||||
|
|
||||||
|
m_SceneName = m_scene.Name;
|
||||||
|
m_IsRunning = true;
|
||||||
|
|
||||||
if (m_workerThreads == null)
|
if (m_workerThreads == null)
|
||||||
{
|
{
|
||||||
m_workerThreads = new Thread[2];
|
m_workerThreads = new Thread[2];
|
||||||
|
@ -135,7 +139,7 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
for (uint i = 0; i < 2; i++)
|
for (uint i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
m_workerThreads[i] = WorkManager.StartThread(DoTextureRequests,
|
m_workerThreads[i] = WorkManager.StartThread(DoTextureRequests,
|
||||||
String.Format("TextureWorkerThread{0}", i),
|
String.Format("GetTextureWorker[{0}]{1}",m_SceneName, i),
|
||||||
ThreadPriority.Normal,
|
ThreadPriority.Normal,
|
||||||
false,
|
false,
|
||||||
false,
|
false,
|
||||||
|
@ -165,17 +169,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
adjData = pthrottles;
|
adjData = pthrottles;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 0.125f converts from bits to bytes
|
|
||||||
//int resend = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f);
|
|
||||||
//pos += 4;
|
|
||||||
// int land = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f);
|
|
||||||
//pos += 4;
|
|
||||||
// int wind = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f);
|
|
||||||
// pos += 4;
|
|
||||||
// int cloud = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f);
|
|
||||||
// pos += 4;
|
|
||||||
// int task = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f);
|
|
||||||
// pos += 4;
|
|
||||||
pos = pos + 20;
|
pos = pos + 20;
|
||||||
int texture = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); //pos += 4;
|
int texture = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f); //pos += 4;
|
||||||
//int asset = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f);
|
//int asset = (int)(BitConverter.ToSingle(adjData, pos) * 0.125f);
|
||||||
|
@ -199,7 +192,17 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Close() { }
|
public void Close()
|
||||||
|
{
|
||||||
|
if(m_IsRunning && m_workerThreads != null)
|
||||||
|
{
|
||||||
|
m_log.DebugFormat("[GetTextureModule] Closing {0}", m_SceneName);
|
||||||
|
m_IsRunning = false;
|
||||||
|
foreach (Thread t in m_workerThreads)
|
||||||
|
Watchdog.AbortThread(t.ManagedThreadId);
|
||||||
|
}
|
||||||
|
m_queue.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
public string Name { get { return "GetTextureModule"; } }
|
public string Name { get { return "GetTextureModule"; } }
|
||||||
|
|
||||||
|
@ -210,13 +213,6 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
~GetTextureModule()
|
|
||||||
{
|
|
||||||
foreach (Thread t in m_workerThreads)
|
|
||||||
Watchdog.AbortThread(t.ManagedThreadId);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private class PollServiceTextureEventArgs : PollServiceEventArgs
|
private class PollServiceTextureEventArgs : PollServiceEventArgs
|
||||||
{
|
{
|
||||||
private List<Hashtable> requests =
|
private List<Hashtable> requests =
|
||||||
|
@ -414,13 +410,14 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
|
|
||||||
private void DoTextureRequests()
|
private void DoTextureRequests()
|
||||||
{
|
{
|
||||||
while (true)
|
while (m_IsRunning)
|
||||||
{
|
{
|
||||||
aPollRequest poolreq = m_queue.Dequeue();
|
aPollRequest poolreq = m_queue.Dequeue();
|
||||||
|
Watchdog.UpdateThread();
|
||||||
poolreq.thepoll.Process(poolreq);
|
poolreq.thepoll.Process(poolreq);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal sealed class CapsDataThrottler
|
internal sealed class CapsDataThrottler
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -498,7 +495,5 @@ namespace OpenSim.Region.ClientStack.Linden
|
||||||
}
|
}
|
||||||
public int ThrottleBytes;
|
public int ThrottleBytes;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue