public static string Execute() { SSUtil.Log("executing {0}", typeof(T03_enum_string).Name); using (SSTimer t = new SSTimer("_test_enum_to_string")) { for (int i = 0; i < NUM; i++) { for (int k = 0; k < (int)FooTypes.Max; k++) { foo = ((FooTypes)k).ToString(); } } } foo = ""; using (SSTimer t = new SSTimer("_test_enum_get_name")) { for (int i = 0; i < NUM; i++) { for (int k = 0; k < (int)FooTypes.Max; k++) { foo = Enum.GetName(typeof(FooTypes), (FooTypes)k); } } } foo = ""; return foo; // prevent 'foo' from being optimized out }
protected void Timeout(SSContext context, long timeout, TimeoutCallback callback) { long timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); if (timeout <= 0) { callback(context, timestamp); } else { if (m_totalServiceSession >= Int32.MaxValue) { m_totalServiceSession = 0; } SSTimerNode timerNode = new SSTimerNode(); timerNode.Opaque = m_serviceAddress; timerNode.Session = ++m_totalServiceSession; timerNode.TimeoutTimestamp = timestamp + timeout; SSTimer.GetInstance().Add(timerNode); TimeoutContext timeoutContext = new TimeoutContext(); timeoutContext.Callback = callback; timeoutContext.Context = context; m_timeoutCallbacks.Add(timerNode.Session, timeoutContext); } }
void RawTexture() { int xyMax = 512; SSTimer ss = new SSTimer("合图raw方式"); Rect[] rec = new Rect[4]; rec[0].xMin = 0; rec[0].xMax = 0.5f; rec[0].yMin = 0; rec[0].yMax = 0.5f; rec[1].xMin = 0.5f; rec[1].xMax = 1f; rec[1].yMin = 0f; rec[1].yMax = 0.5f; rec[2].xMin = 0f; rec[2].xMax = 0.5f; rec[2].yMin = 0.5f; rec[2].yMax = 1f; rec[3].xMin = 0.5f; rec[3].xMax = 1; rec[3].yMin = 0.5f; rec[3].yMax = 1f; //mergeTxMgr.Instance.getBlcokBytes(texture2s[0], 512); //mergeTxMgr.Instance.getBlcokBytes(texture2s[1], 512); //mergeTxMgr.Instance.getBlcokBytes(texture2s[2], 512); int blockByte = mergeTxMgr.Instance.getBlcokBytes(texture2s[3], 512); mergeTxMgr.Instance.getByteInTx(rec[0].xMin, rec[0].yMin, mergeTxMgr.Instance.data, blockByte, xyMax, texture2s[0]); mergeTxMgr.Instance.getByteInTx(rec[1].xMin, rec[1].yMin, mergeTxMgr.Instance.data, blockByte, xyMax, texture2s[1]); mergeTxMgr.Instance.getByteInTx(rec[2].xMin, rec[2].yMin, mergeTxMgr.Instance.data, blockByte, xyMax, texture2s[2]); mergeTxMgr.Instance.getByteInTx(rec[3].xMin, rec[3].yMin, mergeTxMgr.Instance.data, blockByte, xyMax, texture2s[3]); ss.Dispose(); outTexture = new Texture2D(xyMax, xyMax, texture2s[0].format, false); outTexture.name = "raw__texture__512X512"; outTexture.LoadRawTextureData(mergeTxMgr.Instance.data); outTexture.Apply(false, true); }
public static void Execute() { SSUtil.Log("executing {0}", typeof(T06_matrix_caching).Name); Matrix4x4 ret = Matrix4x4.zero; ResetRandomly(); using (SSTimer t = new SSTimer("_test_mat_caching: no caching_")) { for (int i = 0; i < NUM; i++) { ret = Camera.main.worldToCameraMatrix * _inputMat; } } ResetRandomly(); using (SSTimer t = new SSTimer("_test_mat_caching: cached_")) { Matrix4x4 cached = Camera.main.worldToCameraMatrix; for (int i = 0; i < NUM; i++) { ret = cached * _inputMat; } } }
public static string Execute() { SSUtil.Log("executing {0}", typeof(T03_enum_string).Name); using (SSTimer t = new SSTimer("_test_enum_to_string")) { for (int i = 0; i < NUM; i++) { for (int k = 0; k < (int)FooTypes.Max; k++) { foo = ((FooTypes)k).ToString(); } } } foo = ""; using (SSTimer t = new SSTimer("_test_enum_get_name")) { for (int i = 0; i < NUM; i++) { for (int k = 0; k < (int)FooTypes.Max; k++) { foo = Enum.GetName(typeof(FooTypes), (FooTypes)k); } } } foo = ""; return(foo); // prevent 'foo' from being optimized out }
public static void Execute() { SSUtil.Log("executing {0}", typeof(T01_foreach).Name); for (int i = 0; i < NUM; i++) { _testArray[i] = i; } for (int i = 0; i < NUM; i++) { _testList.Add(i); } for (int i = 0; i < NUM; i++) { _testDict[i] = i; } int sum = 0; using (SSTimer t = new SSTimer("_testArray")) { foreach (var item in _testArray) { sum += item; } } using (SSTimer t = new SSTimer("_testList")) { foreach (var item in _testList) { sum += item; } } using (SSTimer t = new SSTimer("_testDict")) { foreach (var item in _testList) { sum += item; } } }
public static void Execute() { SSUtil.Log("executing {0}", typeof(T01_foreach).Name); for (int i = 0; i < NUM; i++) _testArray[i] = i; for (int i = 0; i < NUM; i++) _testList.Add(i); for (int i = 0; i < NUM; i++) _testDict[i] = i; int sum = 0; using (SSTimer t = new SSTimer("_testArray")) { foreach (var item in _testArray) { sum += item; } } using (SSTimer t = new SSTimer("_testList")) { foreach (var item in _testList) { sum += item; } } using (SSTimer t = new SSTimer("_testDict")) { foreach (var item in _testList) { sum += item; } } }
void Blit() { SSTimer ss = new SSTimer("合图Blit方式"); outTexture = new RenderTexture(512, 512, 0, RenderTextureFormat.ARGB32); outTexture.name = "blit___texture_512X512"; outTexture.useMipMap = true; var lastTarget = RenderTexture.active; RenderTexture.active = outTexture; GL.Clear(true, true, Color.clear); Vector4 textST = new Vector4(); for (int i = 0; i < rects.Length; i++) { Rect r = rects[i]; float tw = texture2s[i].width * totalScale; float th = texture2s[i].height * totalScale; textST.x = MaxAtlasSize / tw; textST.y = MaxAtlasSize / th; textST.z = -r.x / MaxAtlasSize * textST.x; textST.w = -r.y / MaxAtlasSize * textST.y; rendererMaterial.SetVector("_Tex_ST", textST); textST.x = textST.y = r.width / tw / 2; textST.z = textST.w = r.height / th / 2; rendererMaterial.SetVector("_Rect", textST); r.Set(r.x / MaxAtlasSize, r.y / MaxAtlasSize, tw / MaxAtlasSize, th / MaxAtlasSize); //rects[i] = r; rendererMaterial.mainTexture = texture2s[i]; Graphics.Blit(texture2s[i], rendererMaterial); } RenderTexture.active = lastTarget; ss.Dispose(); }
public static void Execute() { SSUtil.Log("executing {0}", typeof(T04_typecast).Name); Foo f = new Bar(); using (SSTimer t = new SSTimer("_test_as_cast_")) { for (int i = 0; i < NUM; i++) { Bar b = f as Bar; b.dummy_derived = 1; } } using (SSTimer t = new SSTimer("_test_c_style_cast_")) { for (int i = 0; i < NUM; i++) { Bar b = (Bar)f; b.dummy_derived = 1; } } }
/** 合并蒙皮,合并纹理 * 纹理需要打开读写 */ void CombineObject(GameObject skeleton, int combine_size) { if (combineHolderList == null || combineHolderList.Count == 0) { return; } List <Transform> transforms = new List <Transform>(); CollectionTransforms(skeleton.transform, ref transforms); List <Transform> bones = new List <Transform>(); string flag = "hair-?_clothes-?_pants-?_shoes-?"; Material newMaterial = null; Mesh shaderMesh = null; List <CombineInstance> combineInstances = new List <CombineInstance>(); List <Vector2[]> oldUV = new List <Vector2[]>(); List <Material> materials = new List <Material>(); SkinnedMeshCombinerHolder holder = null; for (int i = 0; i < combineHolderList.Count; i++) { holder = combineHolderList[i]; CombineInstance ci = new CombineInstance(); ci.mesh = holder.mesh; ci.subMeshIndex = 0; combineInstances.Add(ci); materials.Add(holder.material); for (int j = 0; j < holder.stringHolder.content.Length; j++) { int tBase = 0; for (tBase = 0; tBase < transforms.Count; tBase++) { if (holder.stringHolder.content[j].Equals(transforms[tBase].name)) { bones.Add(transforms[tBase]); break; } } } } List <Texture2D> Textures = new List <Texture2D>(); TextureFormat format = TextureFormat.RGBA32; for (int i = 0; i < materials.Count; i++) { Textures.Add(materials[i].GetTexture(COMBINE_DIFFUSE_TEXTURE) as Texture2D); } format = Textures[0].format; newMaterial = UnityEngine.Object.Instantiate(materials[0]); newMaterial.name = flag; Texture2D newDiffuseTex = null; SSTimer ss = new SSTimer("合图Pack方式"); newDiffuseTex = new Texture2D(combine_size, combine_size, format, true); newDiffuseTex.name = "packtexture__texture_512X512"; newMaterial.mainTexture = newDiffuseTex; Rect[] uvs = newDiffuseTex.PackTextures(Textures.ToArray(), 0, maxnumsize, true); ss.Dispose(); Vector2[] uva, uvb; for (int j = 0; j < combineInstances.Count; j++) { uva = (Vector2[])(combineInstances[j].mesh.uv); uvb = new Vector2[uva.Length]; for (int k = 0; k < uva.Length; k++) { uvb[k] = new Vector2((uva[k].x * uvs[j].width) + uvs[j].x, (uva[k].y * uvs[j].height) + uvs[j].y); } oldUV.Add(combineInstances[j].mesh.uv); combineInstances[j].mesh.uv = uvb; } shaderMesh = new Mesh(); shaderMesh.CombineMeshes(combineInstances.ToArray(), true, false); shaderMesh.name = flag; for (int i = 0; i < combineInstances.Count; i++) { combineInstances[i].mesh.uv = oldUV[i]; } GameObject body = new GameObject("body"); body.layer = skeleton.layer; body.transform.parent = skeleton.transform; body.transform.localPosition = Vector3.zero; body.transform.eulerAngles = Vector3.zero; SkinnedMeshRenderer skr = body.AddComponent <SkinnedMeshRenderer>(); skr.sharedMesh = shaderMesh; skr.bones = bones.ToArray(); skr.sharedMaterial = newMaterial; }
private void Boot(BootServices customBoot) { // create global instance first m_globalMQ = GlobalMQ.GetInstance(); m_serviceSlots = ServiceSlots.GetInstance(); m_netpackQueue = NetworkPacketQueue.GetInstance(); m_timer = SSTimer.GetInstance(); NetProtocol.GetInstance(); // create logger service second Logger_Init loggerInit = new Logger_Init(); if (m_bootConfig.ContainsKey("Logger")) { if (Directory.Exists(m_bootConfig["Logger"].ToString())) { loggerInit.logger_path = Path.GetFullPath(m_bootConfig["Logger"].ToString()); } else { DirectoryInfo di = Directory.CreateDirectory(m_bootConfig["Logger"].ToString()); if (di.Exists) { loggerInit.logger_path = Path.GetFullPath(m_bootConfig["Logger"].ToString()); } else { loggerInit.logger_path = "../"; } } } else { loggerInit.logger_path = "../"; } SparkServerUtility.NewService("SparkServer.Framework.Service.Logger.LoggerService", "logger", loggerInit.encode()); m_tcpObjectContainer = new TCPObjectContainer(); if (m_bootConfig.ContainsKey("ClusterConfig")) { InitCluster(); } if (m_bootConfig.ContainsKey("Gateway")) { InitGateway(); } customBoot(); LoggerHelper.Info(0, "Start SparkServer Server..."); for (int i = 0; i < m_workerNum; i++) { Thread thread = new Thread(new ThreadStart(ThreadWorker)); thread.Start(); } Thread timerThread = new Thread(new ThreadStart(ThreadTimer)); timerThread.Start(); }
public static void Execute() { SSUtil.Log("executing {0}", typeof(T05_matrix).Name); // testing correctness ResetRandomly(); Matrix4x4 r0 = _m1 * _m2; Matrix4x4 r1 = SSMatrix.Mul_v1_naive(_m1, _m2); Matrix4x4 r2 = SSMatrix.Mul_v2_naive_expanded(_m1, _m2); Matrix4x4 r3 = Matrix4x4.zero; SSMatrix.Mul_v3_ref(ref r3, ref _m1, ref _m2); SSUtil.Assert(r0 == r1, "matrix r1 bad result."); SSUtil.Assert(r0 == r2, "matrix r2 bad result."); SSUtil.Assert(r0 == r3, "matrix r3 bad result."); // 'Mul_v4_for_3d_trans' always produce the same 4th row Matrix4x4 r4 = Matrix4x4.zero; SSMatrix.Mul_v4_for_3d_trans(ref r4, ref _m1, ref _m2); Matrix4x4 r4_target = r0; r4_target.SetRow(3, new Vector4(0.0f, 0.0f, 0.0f, 1.0f)); SSUtil.Assert(r4 == r4_target, "matrix r4 bad result."); // testing performances Matrix4x4 ret = Matrix4x4.zero; ResetRandomly(); using (SSTimer t = new SSTimer("_test_mat_mul: Unity Built-In_")) { for (int i = 0; i < NUM; i++) { ret = _m1 * _m2; } } ResetRandomly(); using (SSTimer t = new SSTimer("_test_mat_mul: v1 - Naive Implementation_")) { for (int i = 0; i < NUM; i++) { ret = SSMatrix.Mul_v1_naive(_m1, _m2); } } ResetRandomly(); using (SSTimer t = new SSTimer("_test_mat_mul: v2 - Naive (Expanded)_")) { for (int i = 0; i < NUM; i++) { ret = SSMatrix.Mul_v2_naive_expanded(_m1, _m2); } } ResetRandomly(); using (SSTimer t = new SSTimer("_test_mat_mul: v3 - ref passed & returned_")) { for (int i = 0; i < NUM; i++) { SSMatrix.Mul_v3_ref(ref ret, ref _m1, ref _m2); } } ResetRandomly(); using (SSTimer t = new SSTimer("_test_mat_mul: v4 - for 3d transform only_")) { for (int i = 0; i < NUM; i++) { SSMatrix.Mul_v4_for_3d_trans(ref ret, ref _m1, ref _m2); } } }