12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033 |
- #if UNITY_CHANGE1 || UNITY_CHANGE2 || UNITY_CHANGE3
- #warning UNITY_CHANGE has been set manually
- #elif UNITY_4_0 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_4_7
- #define UNITY_CHANGE1
- #elif UNITY_5_0 || UNITY_5_1 || UNITY_5_2
- #define UNITY_CHANGE2
- #else
- #define UNITY_CHANGE3
- #endif
- //use UNITY_CHANGE1 for unity older than "unity 5"
- //use UNITY_CHANGE2 for unity 5.0 -> 5.3
- //use UNITY_CHANGE3 for unity 5.3 (fix for new SceneManger system )
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- #if UNITY_CHANGE3
- using UnityEngine.SceneManagement;
- #endif
- [System.Serializable]
- public class Images
- {
- public Texture2D clearImage;
- public Texture2D collapseImage;
- public Texture2D clearOnNewSceneImage;
- public Texture2D showTimeImage;
- public Texture2D showSceneImage;
- public Texture2D userImage;
- public Texture2D showMemoryImage;
- public Texture2D softwareImage;
- public Texture2D dateImage;
- public Texture2D showFpsImage;
- public Texture2D infoImage;
- public Texture2D searchImage;
- public Texture2D closeImage;
- public Texture2D buildFromImage;
- public Texture2D systemInfoImage;
- public Texture2D graphicsInfoImage;
- public Texture2D backImage;
- public Texture2D logImage;
- public Texture2D warningImage;
- public Texture2D errorImage;
- public Texture2D barImage;
- public Texture2D button_activeImage;
- public Texture2D even_logImage;
- public Texture2D odd_logImage;
- public Texture2D selectedImage;
- public GUISkin reporterScrollerSkin;
- }
- //To use Reporter just create reporter from menu (Reporter->Create) at first scene your game start.
- //then set the ” Scrip execution order ” in (Edit -> Project Settings ) of Reporter.cs to be the highest.
- //Now to view logs all what you have to do is to make a circle gesture using your mouse (click and drag)
- //or your finger (touch and drag) on the screen to show all these logs
- //no coding is required
- public class Reporter : MonoBehaviour
- {
- public enum _LogType
- {
- Assert = LogType.Assert,
- Error = LogType.Error,
- Exception = LogType.Exception,
- Log = LogType.Log,
- Warning = LogType.Warning,
- }
- public class Sample
- {
- public float time;
- public byte loadedScene;
- public float memory;
- public float fps;
- public string fpsText;
- public static float MemSize()
- {
- float s = sizeof(float) + sizeof(byte) + sizeof(float) + sizeof(float);
- return s;
- }
- public string GetSceneName()
- {
- if ((int)loadedScene == -1)
- return "AssetBundleScene";
- return scenes[loadedScene];
- }
- }
- List<Sample> samples = new List<Sample>(60 * 60 * 60);
- public class Log
- {
- public int count = 1;
- public _LogType logType;
- public string condition;
- public string stacktrace;
- public int sampleId;
- //public string objectName="" ;//object who send error
- //public string rootName =""; //root of object send error
- public Log CreateCopy()
- {
- return (Log)this.MemberwiseClone();
- }
- public float GetMemoryUsage()
- {
- return (float)(sizeof(int) +
- sizeof(_LogType) +
- condition.Length * sizeof(char) +
- stacktrace.Length * sizeof(char) +
- sizeof(int));
- }
- }
- //contains all uncollapsed log
- List<Log> logs = new List<Log>();
- //contains all collapsed logs
- List<Log> collapsedLogs = new List<Log>();
- //contain logs which should only appear to user , for example if you switch off show logs + switch off show warnings
- //and your mode is collapse,then this list will contains only collapsed errors
- List<Log> currentLog = new List<Log>();
- //used to check if the new coming logs is already exist or new one
- MultiKeyDictionary<string, string, Log> logsDic = new MultiKeyDictionary<string, string, Log>();
- //to save memory
- Dictionary<string, string> cachedString = new Dictionary<string, string>();
- [HideInInspector]
- //show hide In Game Logs
- public bool show = false;
- //collapse logs
- bool collapse;
- //to decide if you want to clean logs for new loaded scene
- bool clearOnNewSceneLoaded;
- bool showTime;
- bool showScene;
- bool showMemory;
- bool showFps;
- bool showGraph;
- //show or hide logs
- bool showLog = true;
- //show or hide warnings
- bool showWarning = true;
- //show or hide errors
- bool showError = true;
- //total number of logs
- int numOfLogs = 0;
- //total number of warnings
- int numOfLogsWarning = 0;
- //total number of errors
- int numOfLogsError = 0;
- //total number of collapsed logs
- int numOfCollapsedLogs = 0;
- //total number of collapsed warnings
- int numOfCollapsedLogsWarning = 0;
- //total number of collapsed errors
- int numOfCollapsedLogsError = 0;
- //maximum number of allowed logs to view
- //public int maxAllowedLog = 1000 ;
- bool showClearOnNewSceneLoadedButton = true;
- bool showTimeButton = true;
- bool showSceneButton = true;
- bool showMemButton = true;
- bool showFpsButton = true;
- bool showSearchText = true;
- string buildDate;
- string logDate;
- float logsMemUsage;
- float graphMemUsage;
- public float TotalMemUsage
- {
- get
- {
- return logsMemUsage + graphMemUsage;
- }
- }
- float gcTotalMemory;
- public string UserData = "";
- //frame rate per second
- public float fps;
- public string fpsText;
- //List<Texture2D> snapshots = new List<Texture2D>() ;
- enum ReportView
- {
- None,
- Logs,
- Info,
- Snapshot,
- }
- ReportView currentView = ReportView.Logs;
- enum DetailView
- {
- None,
- StackTrace,
- Graph,
- }
- //used to check if you have In Game Logs multiple time in different scene
- //only one should work and other should be deleted
- static bool created = false;
- //public delegate void OnLogHandler( string condition, string stack-trace, LogType type );
- //public event OnLogHandler OnLog ;
- public Images images;
- // gui
- GUIContent clearContent;
- GUIContent collapseContent;
- GUIContent clearOnNewSceneContent;
- GUIContent showTimeContent;
- GUIContent showSceneContent;
- GUIContent userContent;
- GUIContent showMemoryContent;
- GUIContent softwareContent;
- GUIContent dateContent;
- GUIContent showFpsContent;
- //GUIContent graphContent;
- GUIContent infoContent;
- GUIContent searchContent;
- GUIContent closeContent;
- GUIContent buildFromContent;
- GUIContent systemInfoContent;
- GUIContent graphicsInfoContent;
- GUIContent backContent;
- //GUIContent cameraContent;
- GUIContent logContent;
- GUIContent warningContent;
- GUIContent errorContent;
- GUIStyle barStyle;
- GUIStyle buttonActiveStyle;
- GUIStyle nonStyle;
- GUIStyle lowerLeftFontStyle;
- GUIStyle backStyle;
- GUIStyle evenLogStyle;
- GUIStyle oddLogStyle;
- GUIStyle logButtonStyle;
- GUIStyle selectedLogStyle;
- GUIStyle selectedLogFontStyle;
- GUIStyle stackLabelStyle;
- GUIStyle scrollerStyle;
- GUIStyle searchStyle;
- GUIStyle sliderBackStyle;
- GUIStyle sliderThumbStyle;
- GUISkin toolbarScrollerSkin;
- GUISkin logScrollerSkin;
- GUISkin graphScrollerSkin;
- public Vector2 size = new Vector2(32, 32);
- public float maxSize = 20;
- public int numOfCircleToShow = 1;
- static string[] scenes;
- string currentScene;
- string filterText = "";
- string deviceModel;
- string deviceType;
- string deviceName;
- string graphicsMemorySize;
- #if !UNITY_CHANGE1
- string maxTextureSize;
- #endif
- string systemMemorySize;
- void Awake()
- {
- if (!Initialized)
- Initialize();
- }
- void OnEnable()
- {
- if (logs.Count == 0)//if recompile while in play mode
- clear();
- }
- void OnDisable()
- {
- }
- void addSample()
- {
- Sample sample = new Sample();
- sample.fps = fps;
- sample.fpsText = fpsText;
- #if UNITY_CHANGE3
- sample.loadedScene = (byte)SceneManager.GetActiveScene().buildIndex;
- #else
- sample.loadedScene = (byte)Application.loadedLevel;
- #endif
- sample.time = Time.realtimeSinceStartup;
- sample.memory = gcTotalMemory;
- samples.Add(sample);
- graphMemUsage = (samples.Count * Sample.MemSize()) / 1024 / 1024;
- }
- public bool Initialized = false;
- public void Initialize()
- {
- if (!created) {
- try {
- gameObject.SendMessage("OnPreStart");
- }
- catch (System.Exception e) {
- Debug.LogException(e);
- }
- #if UNITY_CHANGE3
- scenes = new string[ SceneManager.sceneCountInBuildSettings ];
- currentScene = SceneManager.GetActiveScene().name;
- #else
- scenes = new string[Application.levelCount];
- currentScene = Application.loadedLevelName;
- #endif
- DontDestroyOnLoad(gameObject);
- #if UNITY_CHANGE1
- Application.RegisterLogCallback (new Application.LogCallback (CaptureLog));
- Application.RegisterLogCallbackThreaded (new Application.LogCallback (CaptureLogThread));
- #else
- //Application.logMessageReceived += CaptureLog ;
- Application.logMessageReceivedThreaded += CaptureLogThread;
- #endif
- created = true;
- //addSample();
- }
- else {
- Debug.LogWarning("tow manager is exists delete the second");
- DestroyImmediate(gameObject, true);
- return;
- }
- //initialize gui and styles for gui purpose
- clearContent = new GUIContent("", images.clearImage, "Clear logs");
- collapseContent = new GUIContent("", images.collapseImage, "Collapse logs");
- clearOnNewSceneContent = new GUIContent("", images.clearOnNewSceneImage, "Clear logs on new scene loaded");
- showTimeContent = new GUIContent("", images.showTimeImage, "Show Hide Time");
- showSceneContent = new GUIContent("", images.showSceneImage, "Show Hide Scene");
- showMemoryContent = new GUIContent("", images.showMemoryImage, "Show Hide Memory");
- softwareContent = new GUIContent("", images.softwareImage, "Software");
- dateContent = new GUIContent("", images.dateImage, "Date");
- showFpsContent = new GUIContent("", images.showFpsImage, "Show Hide fps");
- infoContent = new GUIContent("", images.infoImage, "Information about application");
- searchContent = new GUIContent("", images.searchImage, "Search for logs");
- closeContent = new GUIContent("", images.closeImage, "Hide logs");
- userContent = new GUIContent("", images.userImage, "User");
- buildFromContent = new GUIContent("", images.buildFromImage, "Build From");
- systemInfoContent = new GUIContent("", images.systemInfoImage, "System Info");
- graphicsInfoContent = new GUIContent("", images.graphicsInfoImage, "Graphics Info");
- backContent = new GUIContent("", images.backImage, "Back");
- //snapshotContent = new GUIContent("",images.cameraImage,"show or hide logs");
- logContent = new GUIContent("", images.logImage, "show or hide logs");
- warningContent = new GUIContent("", images.warningImage, "show or hide warnings");
- errorContent = new GUIContent("", images.errorImage, "show or hide errors");
- currentView = (ReportView)PlayerPrefs.GetInt("Reporter_currentView", 1);
- show = (PlayerPrefs.GetInt("Reporter_show") == 1) ? true : false;
- collapse = (PlayerPrefs.GetInt("Reporter_collapse") == 1) ? true : false;
- clearOnNewSceneLoaded = (PlayerPrefs.GetInt("Reporter_clearOnNewSceneLoaded") == 1) ? true : false;
- showTime = (PlayerPrefs.GetInt("Reporter_showTime") == 1) ? true : false;
- showScene = (PlayerPrefs.GetInt("Reporter_showScene") == 1) ? true : false;
- showMemory = (PlayerPrefs.GetInt("Reporter_showMemory") == 1) ? true : false;
- showFps = (PlayerPrefs.GetInt("Reporter_showFps") == 1) ? true : false;
- showGraph = (PlayerPrefs.GetInt("Reporter_showGraph") == 1) ? true : false;
- showLog = (PlayerPrefs.GetInt("Reporter_showLog", 1) == 1) ? true : false;
- showWarning = (PlayerPrefs.GetInt("Reporter_showWarning", 1) == 1) ? true : false;
- showError = (PlayerPrefs.GetInt("Reporter_showError", 1) == 1) ? true : false;
- filterText = PlayerPrefs.GetString("Reporter_filterText");
- size.x = size.y = PlayerPrefs.GetFloat("Reporter_size", 32);
- showClearOnNewSceneLoadedButton = (PlayerPrefs.GetInt("Reporter_showClearOnNewSceneLoadedButton", 1) == 1) ? true : false;
- showTimeButton = (PlayerPrefs.GetInt("Reporter_showTimeButton", 1) == 1) ? true : false;
- showSceneButton = (PlayerPrefs.GetInt("Reporter_showSceneButton", 1) == 1) ? true : false;
- showMemButton = (PlayerPrefs.GetInt("Reporter_showMemButton", 1) == 1) ? true : false;
- showFpsButton = (PlayerPrefs.GetInt("Reporter_showFpsButton", 1) == 1) ? true : false;
- showSearchText = (PlayerPrefs.GetInt("Reporter_showSearchText", 1) == 1) ? true : false;
- initializeStyle();
- Initialized = true;
- if (show) {
- doShow();
- }
- deviceModel = SystemInfo.deviceModel.ToString();
- deviceType = SystemInfo.deviceType.ToString();
- deviceName = SystemInfo.deviceName.ToString();
- graphicsMemorySize = SystemInfo.graphicsMemorySize.ToString();
- #if !UNITY_CHANGE1
- maxTextureSize = SystemInfo.maxTextureSize.ToString();
- #endif
- systemMemorySize = SystemInfo.systemMemorySize.ToString();
- }
- void initializeStyle()
- {
- int paddingX = (int)(size.x * 0.2f);
- int paddingY = (int)(size.y * 0.2f);
- nonStyle = new GUIStyle();
- nonStyle.clipping = TextClipping.Clip;
- nonStyle.border = new RectOffset(0, 0, 0, 0);
- nonStyle.normal.background = null;
- nonStyle.fontSize = (int)(size.y / 2);
- nonStyle.alignment = TextAnchor.MiddleCenter;
- lowerLeftFontStyle = new GUIStyle();
- lowerLeftFontStyle.clipping = TextClipping.Clip;
- lowerLeftFontStyle.border = new RectOffset(0, 0, 0, 0);
- lowerLeftFontStyle.normal.background = null;
- lowerLeftFontStyle.fontSize = (int)(size.y / 2);
- lowerLeftFontStyle.fontStyle = FontStyle.Bold;
- lowerLeftFontStyle.alignment = TextAnchor.LowerLeft;
- barStyle = new GUIStyle();
- barStyle.border = new RectOffset(1, 1, 1, 1);
- barStyle.normal.background = images.barImage;
- barStyle.active.background = images.button_activeImage;
- barStyle.alignment = TextAnchor.MiddleCenter;
- barStyle.margin = new RectOffset(1, 1, 1, 1);
- //barStyle.padding = new RectOffset(paddingX,paddingX,paddingY,paddingY);
- //barStyle.wordWrap = true ;
- barStyle.clipping = TextClipping.Clip;
- barStyle.fontSize = (int)(size.y / 2);
- buttonActiveStyle = new GUIStyle();
- buttonActiveStyle.border = new RectOffset(1, 1, 1, 1);
- buttonActiveStyle.normal.background = images.button_activeImage;
- buttonActiveStyle.alignment = TextAnchor.MiddleCenter;
- buttonActiveStyle.margin = new RectOffset(1, 1, 1, 1);
- //buttonActiveStyle.padding = new RectOffset(4,4,4,4);
- buttonActiveStyle.fontSize = (int)(size.y / 2);
- backStyle = new GUIStyle();
- backStyle.normal.background = images.even_logImage;
- backStyle.clipping = TextClipping.Clip;
- backStyle.fontSize = (int)(size.y / 2);
- evenLogStyle = new GUIStyle();
- evenLogStyle.normal.background = images.even_logImage;
- evenLogStyle.fixedHeight = size.y;
- evenLogStyle.clipping = TextClipping.Clip;
- evenLogStyle.alignment = TextAnchor.UpperLeft;
- evenLogStyle.imagePosition = ImagePosition.ImageLeft;
- evenLogStyle.fontSize = (int)(size.y / 2);
- //evenLogStyle.wordWrap = true;
- oddLogStyle = new GUIStyle();
- oddLogStyle.normal.background = images.odd_logImage;
- oddLogStyle.fixedHeight = size.y;
- oddLogStyle.clipping = TextClipping.Clip;
- oddLogStyle.alignment = TextAnchor.UpperLeft;
- oddLogStyle.imagePosition = ImagePosition.ImageLeft;
- oddLogStyle.fontSize = (int)(size.y / 2);
- //oddLogStyle.wordWrap = true ;
- logButtonStyle = new GUIStyle();
- //logButtonStyle.wordWrap = true;
- logButtonStyle.fixedHeight = size.y;
- logButtonStyle.clipping = TextClipping.Clip;
- logButtonStyle.alignment = TextAnchor.UpperLeft;
- //logButtonStyle.imagePosition = ImagePosition.ImageLeft ;
- //logButtonStyle.wordWrap = true;
- logButtonStyle.fontSize = (int)(size.y / 2);
- logButtonStyle.padding = new RectOffset(paddingX, paddingX, paddingY, paddingY);
- selectedLogStyle = new GUIStyle();
- selectedLogStyle.normal.background = images.selectedImage;
- selectedLogStyle.fixedHeight = size.y;
- selectedLogStyle.clipping = TextClipping.Clip;
- selectedLogStyle.alignment = TextAnchor.UpperLeft;
- selectedLogStyle.normal.textColor = Color.white;
- //selectedLogStyle.wordWrap = true;
- selectedLogStyle.fontSize = (int)(size.y / 2);
- selectedLogFontStyle = new GUIStyle();
- selectedLogFontStyle.normal.background = images.selectedImage;
- selectedLogFontStyle.fixedHeight = size.y;
- selectedLogFontStyle.clipping = TextClipping.Clip;
- selectedLogFontStyle.alignment = TextAnchor.UpperLeft;
- selectedLogFontStyle.normal.textColor = Color.white;
- //selectedLogStyle.wordWrap = true;
- selectedLogFontStyle.fontSize = (int)(size.y / 2);
- selectedLogFontStyle.padding = new RectOffset(paddingX, paddingX, paddingY, paddingY);
- stackLabelStyle = new GUIStyle();
- stackLabelStyle.wordWrap = true;
- stackLabelStyle.fontSize = (int)(size.y / 2);
- stackLabelStyle.padding = new RectOffset(paddingX, paddingX, paddingY, paddingY);
- scrollerStyle = new GUIStyle();
- scrollerStyle.normal.background = images.barImage;
- searchStyle = new GUIStyle();
- searchStyle.clipping = TextClipping.Clip;
- searchStyle.alignment = TextAnchor.LowerCenter;
- searchStyle.fontSize = (int)(size.y / 2);
- searchStyle.wordWrap = true;
- sliderBackStyle = new GUIStyle();
- sliderBackStyle.normal.background = images.barImage;
- sliderBackStyle.fixedHeight = size.y;
- sliderBackStyle.border = new RectOffset(1, 1, 1, 1);
- sliderThumbStyle = new GUIStyle();
- sliderThumbStyle.normal.background = images.selectedImage;
- sliderThumbStyle.fixedWidth = size.x;
- GUISkin skin = images.reporterScrollerSkin;
- toolbarScrollerSkin = (GUISkin)GameObject.Instantiate(skin);
- toolbarScrollerSkin.verticalScrollbar.fixedWidth = 0f;
- toolbarScrollerSkin.horizontalScrollbar.fixedHeight = 0f;
- toolbarScrollerSkin.verticalScrollbarThumb.fixedWidth = 0f;
- toolbarScrollerSkin.horizontalScrollbarThumb.fixedHeight = 0f;
- logScrollerSkin = (GUISkin)GameObject.Instantiate(skin);
- logScrollerSkin.verticalScrollbar.fixedWidth = size.x * 2f;
- logScrollerSkin.horizontalScrollbar.fixedHeight = 0f;
- logScrollerSkin.verticalScrollbarThumb.fixedWidth = size.x * 2f;
- logScrollerSkin.horizontalScrollbarThumb.fixedHeight = 0f;
- graphScrollerSkin = (GUISkin)GameObject.Instantiate(skin);
- graphScrollerSkin.verticalScrollbar.fixedWidth = 0f;
- graphScrollerSkin.horizontalScrollbar.fixedHeight = size.x * 2f;
- graphScrollerSkin.verticalScrollbarThumb.fixedWidth = 0f;
- graphScrollerSkin.horizontalScrollbarThumb.fixedHeight = size.x * 2f;
- //inGameLogsScrollerSkin.verticalScrollbarThumb.fixedWidth = size.x * 2;
- //inGameLogsScrollerSkin.verticalScrollbar.fixedWidth = size.x * 2;
- }
- void Start()
- {
- logDate = System.DateTime.Now.ToString();
- StartCoroutine("readInfo");
- }
- //clear all logs
- void clear()
- {
- logs.Clear();
- collapsedLogs.Clear();
- currentLog.Clear();
- logsDic.Clear();
- //selectedIndex = -1;
- selectedLog = null;
- numOfLogs = 0;
- numOfLogsWarning = 0;
- numOfLogsError = 0;
- numOfCollapsedLogs = 0;
- numOfCollapsedLogsWarning = 0;
- numOfCollapsedLogsError = 0;
- logsMemUsage = 0;
- graphMemUsage = 0;
- samples.Clear();
- System.GC.Collect();
- selectedLog = null;
- }
- Rect screenRect;
- Rect toolBarRect;
- Rect logsRect;
- Rect stackRect;
- Rect graphRect;
- Rect graphMinRect;
- Rect graphMaxRect;
- Rect buttomRect;
- Vector2 stackRectTopLeft;
- Rect detailRect;
- Vector2 scrollPosition;
- Vector2 scrollPosition2;
- Vector2 toolbarScrollPosition;
- //int selectedIndex = -1;
- Log selectedLog;
- float toolbarOldDrag = 0;
- float oldDrag;
- float oldDrag2;
- float oldDrag3;
- int startIndex;
- //calculate what is the currentLog : collapsed or not , hide or view warnings ......
- void calculateCurrentLog()
- {
- bool filter = !string.IsNullOrEmpty(filterText);
- string _filterText = "";
- if (filter)
- _filterText = filterText.ToLower();
- currentLog.Clear();
- if (collapse) {
- for (int i = 0; i < collapsedLogs.Count; i++) {
- Log log = collapsedLogs[i];
- if (log.logType == _LogType.Log && !showLog)
- continue;
- if (log.logType == _LogType.Warning && !showWarning)
- continue;
- if (log.logType == _LogType.Error && !showError)
- continue;
- if (log.logType == _LogType.Assert && !showError)
- continue;
- if (log.logType == _LogType.Exception && !showError)
- continue;
- if (filter) {
- if (log.condition.ToLower().Contains(_filterText))
- currentLog.Add(log);
- }
- else {
- currentLog.Add(log);
- }
- }
- }
- else {
- for (int i = 0; i < logs.Count; i++) {
- Log log = logs[i];
- if (log.logType == _LogType.Log && !showLog)
- continue;
- if (log.logType == _LogType.Warning && !showWarning)
- continue;
- if (log.logType == _LogType.Error && !showError)
- continue;
- if (log.logType == _LogType.Assert && !showError)
- continue;
- if (log.logType == _LogType.Exception && !showError)
- continue;
- if (filter) {
- if (log.condition.ToLower().Contains(_filterText))
- currentLog.Add(log);
- }
- else {
- currentLog.Add(log);
- }
- }
- }
- if (selectedLog != null) {
- int newSelectedIndex = currentLog.IndexOf(selectedLog);
- if (newSelectedIndex == -1) {
- Log collapsedSelected = logsDic[selectedLog.condition][selectedLog.stacktrace];
- newSelectedIndex = currentLog.IndexOf(collapsedSelected);
- if (newSelectedIndex != -1)
- scrollPosition.y = newSelectedIndex * size.y;
- }
- else {
- scrollPosition.y = newSelectedIndex * size.y;
- }
- }
- }
- Rect countRect;
- Rect timeRect;
- Rect timeLabelRect;
- Rect sceneRect;
- Rect sceneLabelRect;
- Rect memoryRect;
- Rect memoryLabelRect;
- Rect fpsRect;
- Rect fpsLabelRect;
- GUIContent tempContent = new GUIContent();
- Vector2 infoScrollPosition;
- Vector2 oldInfoDrag;
- void DrawInfo()
- {
- GUILayout.BeginArea(screenRect, backStyle);
- Vector2 drag = getDrag();
- if ((drag.x != 0) && (downPos != Vector2.zero)) {
- infoScrollPosition.x -= (drag.x - oldInfoDrag.x);
- }
- if ((drag.y != 0) && (downPos != Vector2.zero)) {
- infoScrollPosition.y += (drag.y - oldInfoDrag.y);
- }
- oldInfoDrag = drag;
- GUI.skin = toolbarScrollerSkin;
- infoScrollPosition = GUILayout.BeginScrollView(infoScrollPosition);
- GUILayout.Space(size.x);
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- GUILayout.Box(buildFromContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- GUILayout.Label(buildDate, nonStyle, GUILayout.Height(size.y));
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- GUILayout.Box(systemInfoContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- GUILayout.Label(deviceModel, nonStyle, GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- GUILayout.Label(deviceType, nonStyle, GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- GUILayout.Label(deviceName, nonStyle, GUILayout.Height(size.y));
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- GUILayout.Box(graphicsInfoContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- GUILayout.Label(SystemInfo.graphicsDeviceName, nonStyle, GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- GUILayout.Label(graphicsMemorySize, nonStyle, GUILayout.Height(size.y));
- #if !UNITY_CHANGE1
- GUILayout.Space(size.x);
- GUILayout.Label(maxTextureSize, nonStyle, GUILayout.Height(size.y));
- #endif
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- GUILayout.Space(size.x);
- GUILayout.Space(size.x);
- GUILayout.Label("Screen Width " + Screen.width, nonStyle, GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- GUILayout.Label("Screen Height " + Screen.height, nonStyle, GUILayout.Height(size.y));
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- GUILayout.Box(showMemoryContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- GUILayout.Label(systemMemorySize + " mb", nonStyle, GUILayout.Height(size.y));
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- GUILayout.Space(size.x);
- GUILayout.Space(size.x);
- GUILayout.Label("Mem Usage Of Logs " + logsMemUsage.ToString("0.000") + " mb", nonStyle, GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- //GUILayout.Label( "Mem Usage Of Graph " + graphMemUsage.ToString("0.000") + " mb", nonStyle , GUILayout.Height(size.y));
- //GUILayout.Space( size.x);
- GUILayout.Label("GC Memory " + gcTotalMemory.ToString("0.000") + " mb", nonStyle, GUILayout.Height(size.y));
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- GUILayout.Box(softwareContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- GUILayout.Label(SystemInfo.operatingSystem, nonStyle, GUILayout.Height(size.y));
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- GUILayout.Box(dateContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- GUILayout.Label(System.DateTime.Now.ToString(), nonStyle, GUILayout.Height(size.y));
- GUILayout.Label(" - Application Started At " + logDate, nonStyle, GUILayout.Height(size.y));
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- GUILayout.Box(showTimeContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- GUILayout.Label(Time.realtimeSinceStartup.ToString("000"), nonStyle, GUILayout.Height(size.y));
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- GUILayout.Box(showFpsContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- GUILayout.Label(fpsText, nonStyle, GUILayout.Height(size.y));
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- GUILayout.Box(userContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- GUILayout.Label(UserData, nonStyle, GUILayout.Height(size.y));
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- GUILayout.Box(showSceneContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- GUILayout.Label(currentScene, nonStyle, GUILayout.Height(size.y));
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- GUILayout.Box(showSceneContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- GUILayout.Label("Unity Version = " + Application.unityVersion, nonStyle, GUILayout.Height(size.y));
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- /*GUILayout.BeginHorizontal();
- GUILayout.Space( size.x);
- GUILayout.Box( graphContent ,nonStyle , GUILayout.Width(size.x) , GUILayout.Height(size.y));
- GUILayout.Space( size.x);
- GUILayout.Label( "frame " + samples.Count , nonStyle , GUILayout.Height(size.y));
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();*/
- drawInfo_enableDisableToolBarButtons();
- GUILayout.FlexibleSpace();
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- GUILayout.Label("Size = " + size.x.ToString("0.0"), nonStyle, GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- float _size = GUILayout.HorizontalSlider(size.x, 16, 64, sliderBackStyle, sliderThumbStyle, GUILayout.Width(Screen.width * 0.5f));
- if (size.x != _size) {
- size.x = size.y = _size;
- initializeStyle();
- }
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- if (GUILayout.Button(backContent, barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- currentView = ReportView.Logs;
- }
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.EndScrollView();
- GUILayout.EndArea();
- }
- void drawInfo_enableDisableToolBarButtons()
- {
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- GUILayout.Label("Hide or Show tool bar buttons", nonStyle, GUILayout.Height(size.y));
- GUILayout.Space(size.x);
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- GUILayout.Space(size.x);
- if (GUILayout.Button(clearOnNewSceneContent, (showClearOnNewSceneLoadedButton) ? buttonActiveStyle : barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- showClearOnNewSceneLoadedButton = !showClearOnNewSceneLoadedButton;
- }
- if (GUILayout.Button(showTimeContent, (showTimeButton) ? buttonActiveStyle : barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- showTimeButton = !showTimeButton;
- }
- tempRect = GUILayoutUtility.GetLastRect();
- GUI.Label(tempRect, Time.realtimeSinceStartup.ToString("0.0"), lowerLeftFontStyle);
- if (GUILayout.Button(showSceneContent, (showSceneButton) ? buttonActiveStyle : barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- showSceneButton = !showSceneButton;
- }
- tempRect = GUILayoutUtility.GetLastRect();
- GUI.Label(tempRect, currentScene, lowerLeftFontStyle);
- if (GUILayout.Button(showMemoryContent, (showMemButton) ? buttonActiveStyle : barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- showMemButton = !showMemButton;
- }
- tempRect = GUILayoutUtility.GetLastRect();
- GUI.Label(tempRect, gcTotalMemory.ToString("0.0"), lowerLeftFontStyle);
- if (GUILayout.Button(showFpsContent, (showFpsButton) ? buttonActiveStyle : barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- showFpsButton = !showFpsButton;
- }
- tempRect = GUILayoutUtility.GetLastRect();
- GUI.Label(tempRect, fpsText, lowerLeftFontStyle);
- /*if( GUILayout.Button( graphContent , (showGraph)?buttonActiveStyle:barStyle , GUILayout.Width(size.x*2) ,GUILayout.Height(size.y*2)))
- {
- showGraph = !showGraph ;
- }
- tempRect = GUILayoutUtility.GetLastRect();
- GUI.Label( tempRect , samples.Count.ToString() , lowerLeftFontStyle );*/
- if (GUILayout.Button(searchContent, (showSearchText) ? buttonActiveStyle : barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- showSearchText = !showSearchText;
- }
- tempRect = GUILayoutUtility.GetLastRect();
- GUI.TextField(tempRect, filterText, searchStyle);
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- }
- void DrawReport()
- {
- screenRect.x = 0f;
- screenRect.y = 0f;
- screenRect.width = Screen.width;
- screenRect.height = Screen.height;
- GUILayout.BeginArea(screenRect, backStyle);
- GUILayout.BeginVertical();
- GUILayout.FlexibleSpace();
- GUILayout.BeginHorizontal();
- GUILayout.FlexibleSpace();
- /*GUILayout.Box( cameraContent ,nonStyle , GUILayout.Width(size.x) , GUILayout.Height(size.y));
- GUILayout.FlexibleSpace();*/
- GUILayout.Label("Select Photo", nonStyle, GUILayout.Height(size.y));
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- GUILayout.Label("Coming Soon", nonStyle, GUILayout.Height(size.y));
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal();
- GUILayout.FlexibleSpace();
- if (GUILayout.Button(backContent, barStyle, GUILayout.Width(size.x), GUILayout.Height(size.y))) {
- currentView = ReportView.Logs;
- }
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.FlexibleSpace();
- GUILayout.EndVertical();
- GUILayout.EndArea();
- }
- void drawToolBar()
- {
- toolBarRect.x = 0f;
- toolBarRect.y = 0f;
- toolBarRect.width = Screen.width;
- toolBarRect.height = size.y * 2f;
- //toolbarScrollerSkin.verticalScrollbar.fixedWidth = 0f;
- //toolbarScrollerSkin.horizontalScrollbar.fixedHeight= 0f ;
- GUI.skin = toolbarScrollerSkin;
- Vector2 drag = getDrag();
- if ((drag.x != 0) && (downPos != Vector2.zero) && (downPos.y > Screen.height - size.y * 2f)) {
- toolbarScrollPosition.x -= (drag.x - toolbarOldDrag);
- }
- toolbarOldDrag = drag.x;
- GUILayout.BeginArea(toolBarRect);
- toolbarScrollPosition = GUILayout.BeginScrollView(toolbarScrollPosition);
- GUILayout.BeginHorizontal(barStyle);
- if (GUILayout.Button(clearContent, barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- clear();
- }
- if (GUILayout.Button(collapseContent, (collapse) ? buttonActiveStyle : barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- collapse = !collapse;
- calculateCurrentLog();
- }
- if (showClearOnNewSceneLoadedButton && GUILayout.Button(clearOnNewSceneContent, (clearOnNewSceneLoaded) ? buttonActiveStyle : barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- clearOnNewSceneLoaded = !clearOnNewSceneLoaded;
- }
- if (showTimeButton && GUILayout.Button(showTimeContent, (showTime) ? buttonActiveStyle : barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- showTime = !showTime;
- }
- if (showSceneButton) {
- tempRect = GUILayoutUtility.GetLastRect();
- GUI.Label(tempRect, Time.realtimeSinceStartup.ToString("0.0"), lowerLeftFontStyle);
- if (GUILayout.Button(showSceneContent, (showScene) ? buttonActiveStyle : barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- showScene = !showScene;
- }
- tempRect = GUILayoutUtility.GetLastRect();
- GUI.Label(tempRect, currentScene, lowerLeftFontStyle);
- }
- if (showMemButton) {
- if (GUILayout.Button(showMemoryContent, (showMemory) ? buttonActiveStyle : barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- showMemory = !showMemory;
- }
- tempRect = GUILayoutUtility.GetLastRect();
- GUI.Label(tempRect, gcTotalMemory.ToString("0.0"), lowerLeftFontStyle);
- }
- if (showFpsButton) {
- if (GUILayout.Button(showFpsContent, (showFps) ? buttonActiveStyle : barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- showFps = !showFps;
- }
- tempRect = GUILayoutUtility.GetLastRect();
- GUI.Label(tempRect, fpsText, lowerLeftFontStyle);
- }
- /*if( GUILayout.Button( graphContent , (showGraph)?buttonActiveStyle:barStyle , GUILayout.Width(size.x*2) ,GUILayout.Height(size.y*2)))
- {
- showGraph = !showGraph ;
- }
- tempRect = GUILayoutUtility.GetLastRect();
- GUI.Label( tempRect , samples.Count.ToString() , lowerLeftFontStyle );*/
- if (showSearchText) {
- GUILayout.Box(searchContent, barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2));
- tempRect = GUILayoutUtility.GetLastRect();
- string newFilterText = GUI.TextField(tempRect, filterText, searchStyle);
- if (newFilterText != filterText) {
- filterText = newFilterText;
- calculateCurrentLog();
- }
- }
- if (GUILayout.Button(infoContent, barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- currentView = ReportView.Info;
- }
- GUILayout.FlexibleSpace();
- string logsText = " ";
- if (collapse) {
- logsText += numOfCollapsedLogs;
- }
- else {
- logsText += numOfLogs;
- }
- string logsWarningText = " ";
- if (collapse) {
- logsWarningText += numOfCollapsedLogsWarning;
- }
- else {
- logsWarningText += numOfLogsWarning;
- }
- string logsErrorText = " ";
- if (collapse) {
- logsErrorText += numOfCollapsedLogsError;
- }
- else {
- logsErrorText += numOfLogsError;
- }
- GUILayout.BeginHorizontal((showLog) ? buttonActiveStyle : barStyle);
- if (GUILayout.Button(logContent, nonStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- showLog = !showLog;
- calculateCurrentLog();
- }
- if (GUILayout.Button(logsText, nonStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- showLog = !showLog;
- calculateCurrentLog();
- }
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal((showWarning) ? buttonActiveStyle : barStyle);
- if (GUILayout.Button(warningContent, nonStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- showWarning = !showWarning;
- calculateCurrentLog();
- }
- if (GUILayout.Button(logsWarningText, nonStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- showWarning = !showWarning;
- calculateCurrentLog();
- }
- GUILayout.EndHorizontal();
- GUILayout.BeginHorizontal((showError) ? buttonActiveStyle : nonStyle);
- if (GUILayout.Button(errorContent, nonStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- showError = !showError;
- calculateCurrentLog();
- }
- if (GUILayout.Button(logsErrorText, nonStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- showError = !showError;
- calculateCurrentLog();
- }
- GUILayout.EndHorizontal();
- if (GUILayout.Button(closeContent, barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2))) {
- show = false;
- ReporterGUI gui = gameObject.GetComponent<ReporterGUI>();
- DestroyImmediate(gui);
- try {
- gameObject.SendMessage("OnHideReporter");
- }
- catch (System.Exception e) {
- Debug.LogException(e);
- }
- }
- GUILayout.EndHorizontal();
- GUILayout.EndScrollView();
- GUILayout.EndArea();
- }
- Rect tempRect;
- void DrawLogs()
- {
- GUILayout.BeginArea(logsRect, backStyle);
- GUI.skin = logScrollerSkin;
- //setStartPos();
- Vector2 drag = getDrag();
- if (drag.y != 0 && logsRect.Contains(new Vector2(downPos.x, Screen.height - downPos.y))) {
- scrollPosition.y += (drag.y - oldDrag);
- }
- scrollPosition = GUILayout.BeginScrollView(scrollPosition);
- oldDrag = drag.y;
- int totalVisibleCount = (int)(Screen.height * 0.75f / size.y);
- int totalCount = currentLog.Count;
- /*if( totalCount < 100 )
- inGameLogsScrollerSkin.verticalScrollbarThumb.fixedHeight = 0;
- else
- inGameLogsScrollerSkin.verticalScrollbarThumb.fixedHeight = 64;*/
- totalVisibleCount = Mathf.Min(totalVisibleCount, totalCount - startIndex);
- int index = 0;
- int beforeHeight = (int)(startIndex * size.y);
- //selectedIndex = Mathf.Clamp( selectedIndex , -1 , totalCount -1);
- if (beforeHeight > 0) {
- //fill invisible gap before scroller to make proper scroller pos
- GUILayout.BeginHorizontal(GUILayout.Height(beforeHeight));
- GUILayout.Label("---");
- GUILayout.EndHorizontal();
- }
- int endIndex = startIndex + totalVisibleCount;
- endIndex = Mathf.Clamp(endIndex, 0, totalCount);
- bool scrollerVisible = (totalVisibleCount < totalCount);
- for (int i = startIndex; (startIndex + index) < endIndex; i++) {
- if (i >= currentLog.Count)
- break;
- Log log = currentLog[i];
- if (log.logType == _LogType.Log && !showLog)
- continue;
- if (log.logType == _LogType.Warning && !showWarning)
- continue;
- if (log.logType == _LogType.Error && !showError)
- continue;
- if (log.logType == _LogType.Assert && !showError)
- continue;
- if (log.logType == _LogType.Exception && !showError)
- continue;
- if (index >= totalVisibleCount) {
- break;
- }
- GUIContent content = null;
- if (log.logType == _LogType.Log)
- content = logContent;
- else if (log.logType == _LogType.Warning)
- content = warningContent;
- else
- content = errorContent;
- //content.text = log.condition ;
- GUIStyle currentLogStyle = ((startIndex + index) % 2 == 0) ? evenLogStyle : oddLogStyle;
- if (log == selectedLog) {
- //selectedLog = log ;
- currentLogStyle = selectedLogStyle;
- }
- else {
- }
- tempContent.text = log.count.ToString();
- float w = 0f;
- if (collapse)
- w = barStyle.CalcSize(tempContent).x + 3;
- countRect.x = Screen.width - w;
- countRect.y = size.y * i;
- if (beforeHeight > 0)
- countRect.y += 8;//i will check later why
- countRect.width = w;
- countRect.height = size.y;
- if (scrollerVisible)
- countRect.x -= size.x * 2;
- Sample sample = samples[log.sampleId];
- fpsRect = countRect;
- if (showFps) {
- tempContent.text = sample.fpsText;
- w = currentLogStyle.CalcSize(tempContent).x + size.x;
- fpsRect.x -= w;
- fpsRect.width = size.x;
- fpsLabelRect = fpsRect;
- fpsLabelRect.x += size.x;
- fpsLabelRect.width = w - size.x;
- }
- memoryRect = fpsRect;
- if (showMemory) {
- tempContent.text = sample.memory.ToString("0.000");
- w = currentLogStyle.CalcSize(tempContent).x + size.x;
- memoryRect.x -= w;
- memoryRect.width = size.x;
- memoryLabelRect = memoryRect;
- memoryLabelRect.x += size.x;
- memoryLabelRect.width = w - size.x;
- }
- sceneRect = memoryRect;
- if (showScene) {
- tempContent.text = sample.GetSceneName();
- w = currentLogStyle.CalcSize(tempContent).x + size.x;
- sceneRect.x -= w;
- sceneRect.width = size.x;
- sceneLabelRect = sceneRect;
- sceneLabelRect.x += size.x;
- sceneLabelRect.width = w - size.x;
- }
- timeRect = sceneRect;
- if (showTime) {
- tempContent.text = sample.time.ToString("0.000");
- w = currentLogStyle.CalcSize(tempContent).x + size.x;
- timeRect.x -= w;
- timeRect.width = size.x;
- timeLabelRect = timeRect;
- timeLabelRect.x += size.x;
- timeLabelRect.width = w - size.x;
- }
- GUILayout.BeginHorizontal(currentLogStyle);
- if (log == selectedLog) {
- GUILayout.Box(content, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Label(log.condition, selectedLogFontStyle);
- //GUILayout.FlexibleSpace();
- if (showTime) {
- GUI.Box(timeRect, showTimeContent, currentLogStyle);
- GUI.Label(timeLabelRect, sample.time.ToString("0.000"), currentLogStyle);
- }
- if (showScene) {
- GUI.Box(sceneRect, showSceneContent, currentLogStyle);
- GUI.Label(sceneLabelRect, sample.GetSceneName(), currentLogStyle);
- }
- if (showMemory) {
- GUI.Box(memoryRect, showMemoryContent, currentLogStyle);
- GUI.Label(memoryLabelRect, sample.memory.ToString("0.000") + " mb", currentLogStyle);
- }
- if (showFps) {
- GUI.Box(fpsRect, showFpsContent, currentLogStyle);
- GUI.Label(fpsLabelRect, sample.fpsText, currentLogStyle);
- }
- }
- else {
- if (GUILayout.Button(content, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y))) {
- //selectedIndex = startIndex + index ;
- selectedLog = log;
- }
- if (GUILayout.Button(log.condition, logButtonStyle)) {
- //selectedIndex = startIndex + index ;
- selectedLog = log;
- }
- //GUILayout.FlexibleSpace();
- if (showTime) {
- GUI.Box(timeRect, showTimeContent, currentLogStyle);
- GUI.Label(timeLabelRect, sample.time.ToString("0.000"), currentLogStyle);
- }
- if (showScene) {
- GUI.Box(sceneRect, showSceneContent, currentLogStyle);
- GUI.Label(sceneLabelRect, sample.GetSceneName(), currentLogStyle);
- }
- if (showMemory) {
- GUI.Box(memoryRect, showMemoryContent, currentLogStyle);
- GUI.Label(memoryLabelRect, sample.memory.ToString("0.000") + " mb", currentLogStyle);
- }
- if (showFps) {
- GUI.Box(fpsRect, showFpsContent, currentLogStyle);
- GUI.Label(fpsLabelRect, sample.fpsText, currentLogStyle);
- }
- }
- if (collapse)
- GUI.Label(countRect, log.count.ToString(), barStyle);
- GUILayout.EndHorizontal();
- index++;
- }
- int afterHeight = (int)((totalCount - (startIndex + totalVisibleCount)) * size.y);
- if (afterHeight > 0) {
- //fill invisible gap after scroller to make proper scroller pos
- GUILayout.BeginHorizontal(GUILayout.Height(afterHeight));
- GUILayout.Label(" ");
- GUILayout.EndHorizontal();
- }
- GUILayout.EndScrollView();
- GUILayout.EndArea();
- buttomRect.x = 0f;
- buttomRect.y = Screen.height - size.y;
- buttomRect.width = Screen.width;
- buttomRect.height = size.y;
- if (showGraph)
- drawGraph();
- else
- drawStack();
- }
- float graphSize = 4f;
- int startFrame = 0;
- int currentFrame = 0;
- Vector3 tempVector1;
- Vector3 tempVector2;
- Vector2 graphScrollerPos;
- float maxFpsValue;
- float minFpsValue;
- float maxMemoryValue;
- float minMemoryValue;
- void drawGraph()
- {
- graphRect = stackRect;
- graphRect.height = Screen.height * 0.25f;//- size.y ;
- //startFrame = samples.Count - (int)(Screen.width / graphSize) ;
- //if( startFrame < 0 ) startFrame = 0 ;
- GUI.skin = graphScrollerSkin;
- Vector2 drag = getDrag();
- if (graphRect.Contains(new Vector2(downPos.x, Screen.height - downPos.y))) {
- if (drag.x != 0) {
- graphScrollerPos.x -= drag.x - oldDrag3;
- graphScrollerPos.x = Mathf.Max(0, graphScrollerPos.x);
- }
- Vector2 p = downPos;
- if (p != Vector2.zero) {
- currentFrame = startFrame + (int)(p.x / graphSize);
- }
- }
- oldDrag3 = drag.x;
- GUILayout.BeginArea(graphRect, backStyle);
- graphScrollerPos = GUILayout.BeginScrollView(graphScrollerPos);
- startFrame = (int)(graphScrollerPos.x / graphSize);
- if (graphScrollerPos.x >= (samples.Count * graphSize - Screen.width))
- graphScrollerPos.x += graphSize;
- GUILayout.Label(" ", GUILayout.Width(samples.Count * graphSize));
- GUILayout.EndScrollView();
- GUILayout.EndArea();
- maxFpsValue = 0;
- minFpsValue = 100000;
- maxMemoryValue = 0;
- minMemoryValue = 100000;
- for (int i = 0; i < Screen.width / graphSize; i++) {
- int index = startFrame + i;
- if (index >= samples.Count)
- break;
- Sample s = samples[index];
- if (maxFpsValue < s.fps) maxFpsValue = s.fps;
- if (minFpsValue > s.fps) minFpsValue = s.fps;
- if (maxMemoryValue < s.memory) maxMemoryValue = s.memory;
- if (minMemoryValue > s.memory) minMemoryValue = s.memory;
- }
- //GUI.BeginGroup(graphRect);
- if (currentFrame != -1 && currentFrame < samples.Count) {
- Sample selectedSample = samples[currentFrame];
- GUILayout.BeginArea(buttomRect, backStyle);
- GUILayout.BeginHorizontal();
- GUILayout.Box(showTimeContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Label(selectedSample.time.ToString("0.0"), nonStyle);
- GUILayout.Space(size.x);
- GUILayout.Box(showSceneContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Label(selectedSample.GetSceneName(), nonStyle);
- GUILayout.Space(size.x);
- GUILayout.Box(showMemoryContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Label(selectedSample.memory.ToString("0.000"), nonStyle);
- GUILayout.Space(size.x);
- GUILayout.Box(showFpsContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Label(selectedSample.fpsText, nonStyle);
- GUILayout.Space(size.x);
- /*GUILayout.Box( graphContent ,nonStyle, GUILayout.Width(size.x) ,GUILayout.Height(size.y));
- GUILayout.Label( currentFrame.ToString() ,nonStyle );*/
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.EndArea();
- }
- graphMaxRect = stackRect;
- graphMaxRect.height = size.y;
- GUILayout.BeginArea(graphMaxRect);
- GUILayout.BeginHorizontal();
- GUILayout.Box(showMemoryContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Label(maxMemoryValue.ToString("0.000"), nonStyle);
- GUILayout.Box(showFpsContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Label(maxFpsValue.ToString("0.000"), nonStyle);
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.EndArea();
- graphMinRect = stackRect;
- graphMinRect.y = stackRect.y + stackRect.height - size.y;
- graphMinRect.height = size.y;
- GUILayout.BeginArea(graphMinRect);
- GUILayout.BeginHorizontal();
- GUILayout.Box(showMemoryContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Label(minMemoryValue.ToString("0.000"), nonStyle);
- GUILayout.Box(showFpsContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Label(minFpsValue.ToString("0.000"), nonStyle);
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.EndArea();
- //GUI.EndGroup();
- }
- void drawStack()
- {
- if (selectedLog != null) {
- Vector2 drag = getDrag();
- if (drag.y != 0 && stackRect.Contains(new Vector2(downPos.x, Screen.height - downPos.y))) {
- scrollPosition2.y += drag.y - oldDrag2;
- }
- oldDrag2 = drag.y;
- GUILayout.BeginArea(stackRect, backStyle);
- scrollPosition2 = GUILayout.BeginScrollView(scrollPosition2);
- Sample selectedSample = null;
- try {
- selectedSample = samples[selectedLog.sampleId];
- }
- catch (System.Exception e) {
- Debug.LogException(e);
- }
- GUILayout.BeginHorizontal();
- GUILayout.Label(selectedLog.condition, stackLabelStyle);
- GUILayout.EndHorizontal();
- GUILayout.Space(size.y * 0.25f);
- GUILayout.BeginHorizontal();
- GUILayout.Label(selectedLog.stacktrace, stackLabelStyle);
- GUILayout.EndHorizontal();
- GUILayout.Space(size.y);
- GUILayout.EndScrollView();
- GUILayout.EndArea();
- GUILayout.BeginArea(buttomRect, backStyle);
- GUILayout.BeginHorizontal();
- GUILayout.Box(showTimeContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Label(selectedSample.time.ToString("0.000"), nonStyle);
- GUILayout.Space(size.x);
- GUILayout.Box(showSceneContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Label(selectedSample.GetSceneName(), nonStyle);
- GUILayout.Space(size.x);
- GUILayout.Box(showMemoryContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Label(selectedSample.memory.ToString("0.000"), nonStyle);
- GUILayout.Space(size.x);
- GUILayout.Box(showFpsContent, nonStyle, GUILayout.Width(size.x), GUILayout.Height(size.y));
- GUILayout.Label(selectedSample.fpsText, nonStyle);
- /*GUILayout.Space( size.x );
- GUILayout.Box( graphContent ,nonStyle, GUILayout.Width(size.x) ,GUILayout.Height(size.y));
- GUILayout.Label( selectedLog.sampleId.ToString() ,nonStyle );*/
- GUILayout.FlexibleSpace();
- GUILayout.EndHorizontal();
- GUILayout.EndArea();
- }
- else {
- GUILayout.BeginArea(stackRect, backStyle);
- GUILayout.EndArea();
- GUILayout.BeginArea(buttomRect, backStyle);
- GUILayout.EndArea();
- }
- }
- public void OnGUIDraw()
- {
- if (!show) {
- return;
- }
- screenRect.x = 0;
- screenRect.y = 0;
- screenRect.width = Screen.width;
- screenRect.height = Screen.height;
- getDownPos();
- logsRect.x = 0f;
- logsRect.y = size.y * 2f;
- logsRect.width = Screen.width;
- logsRect.height = Screen.height * 0.75f - size.y * 2f;
- stackRectTopLeft.x = 0f;
- stackRect.x = 0f;
- stackRectTopLeft.y = Screen.height * 0.75f;
- stackRect.y = Screen.height * 0.75f;
- stackRect.width = Screen.width;
- stackRect.height = Screen.height * 0.25f - size.y;
- detailRect.x = 0f;
- detailRect.y = Screen.height - size.y * 3;
- detailRect.width = Screen.width;
- detailRect.height = size.y * 3;
- if (currentView == ReportView.Info)
- DrawInfo();
- else if (currentView == ReportView.Logs) {
- drawToolBar();
- DrawLogs();
- }
- }
- List<Vector2> gestureDetector = new List<Vector2>();
- Vector2 gestureSum = Vector2.zero;
- float gestureLength = 0;
- int gestureCount = 0;
- bool isGestureDone()
- {
- if (Application.platform == RuntimePlatform.Android ||
- Application.platform == RuntimePlatform.IPhonePlayer) {
- if (Input.touches.Length != 1) {
- gestureDetector.Clear();
- gestureCount = 0;
- }
- else {
- if (Input.touches[0].phase == TouchPhase.Canceled || Input.touches[0].phase == TouchPhase.Ended)
- gestureDetector.Clear();
- else if (Input.touches[0].phase == TouchPhase.Moved) {
- Vector2 p = Input.touches[0].position;
- if (gestureDetector.Count == 0 || (p - gestureDetector[gestureDetector.Count - 1]).magnitude > 10)
- gestureDetector.Add(p);
- }
- }
- }
- else {
- if (Input.GetMouseButtonUp(0)) {
- gestureDetector.Clear();
- gestureCount = 0;
- }
- else {
- if (Input.GetMouseButton(0)) {
- Vector2 p = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
- if (gestureDetector.Count == 0 || (p - gestureDetector[gestureDetector.Count - 1]).magnitude > 10)
- gestureDetector.Add(p);
- }
- }
- }
- if (gestureDetector.Count < 10)
- return false;
- gestureSum = Vector2.zero;
- gestureLength = 0;
- Vector2 prevDelta = Vector2.zero;
- for (int i = 0; i < gestureDetector.Count - 2; i++) {
- Vector2 delta = gestureDetector[i + 1] - gestureDetector[i];
- float deltaLength = delta.magnitude;
- gestureSum += delta;
- gestureLength += deltaLength;
- float dot = Vector2.Dot(delta, prevDelta);
- if (dot < 0f) {
- gestureDetector.Clear();
- gestureCount = 0;
- return false;
- }
- prevDelta = delta;
- }
- int gestureBase = (Screen.width + Screen.height) / 4;
- if (gestureLength > gestureBase && gestureSum.magnitude < gestureBase / 2) {
- gestureDetector.Clear();
- gestureCount++;
- if (gestureCount >= numOfCircleToShow)
- return true;
- }
- return false;
- }
- float lastClickTime = -1;
- bool isDoubleClickDone()
- {
- if (Application.platform == RuntimePlatform.Android ||
- Application.platform == RuntimePlatform.IPhonePlayer) {
- if (Input.touches.Length != 1) {
- lastClickTime = -1;
- }
- else {
- if (Input.touches[0].phase == TouchPhase.Began) {
- if (lastClickTime == -1)
- lastClickTime = Time.realtimeSinceStartup;
- else if (Time.realtimeSinceStartup - lastClickTime < 0.2f) {
- lastClickTime = -1;
- return true;
- }
- else {
- lastClickTime = Time.realtimeSinceStartup;
- }
- }
- }
- }
- else {
- if (Input.GetMouseButtonDown(0)) {
- if (lastClickTime == -1)
- lastClickTime = Time.realtimeSinceStartup;
- else if (Time.realtimeSinceStartup - lastClickTime < 0.2f) {
- lastClickTime = -1;
- return true;
- }
- else {
- lastClickTime = Time.realtimeSinceStartup;
- }
- }
- }
- return false;
- }
- //calculate pos of first click on screen
- Vector2 startPos;
- Vector2 downPos;
- Vector2 getDownPos()
- {
- if (Application.platform == RuntimePlatform.Android ||
- Application.platform == RuntimePlatform.IPhonePlayer) {
- if (Input.touches.Length == 1 && Input.touches[0].phase == TouchPhase.Began) {
- downPos = Input.touches[0].position;
- return downPos;
- }
- }
- else {
- if (Input.GetMouseButtonDown(0)) {
- downPos.x = Input.mousePosition.x;
- downPos.y = Input.mousePosition.y;
- return downPos;
- }
- }
- return Vector2.zero;
- }
- //calculate drag amount , this is used for scrolling
- Vector2 mousePosition;
- Vector2 getDrag()
- {
- if (Application.platform == RuntimePlatform.Android ||
- Application.platform == RuntimePlatform.IPhonePlayer) {
- if (Input.touches.Length != 1) {
- return Vector2.zero;
- }
- return Input.touches[0].position - downPos;
- }
- else {
- if (Input.GetMouseButton(0)) {
- mousePosition = Input.mousePosition;
- return mousePosition - downPos;
- }
- else {
- return Vector2.zero;
- }
- }
- }
- //calculate the start index of visible log
- void calculateStartIndex()
- {
- startIndex = (int)(scrollPosition.y / size.y);
- startIndex = Mathf.Clamp(startIndex, 0, currentLog.Count);
- }
- // For FPS Counter
- private int frames = 0;
- private bool firstTime = true;
- private float lastUpdate = 0f;
- private const int requiredFrames = 10;
- private const float updateInterval = 0.25f;
- #if UNITY_CHANGE1
- float lastUpdate2 = 0;
- #endif
- void doShow()
- {
- show = true;
- currentView = ReportView.Logs;
- gameObject.AddComponent<ReporterGUI>();
- try {
- gameObject.SendMessage("OnShowReporter");
- }
- catch (System.Exception e) {
- Debug.LogException(e);
- }
- }
- void Update()
- {
- fpsText = fps.ToString("0.000");
- gcTotalMemory = (((float)System.GC.GetTotalMemory(false)) / 1024 / 1024);
- //addSample();
- #if UNITY_CHANGE3
- int sceneIndex = SceneManager.GetActiveScene().buildIndex ;
- if( sceneIndex != -1 && string.IsNullOrEmpty( scenes[sceneIndex] ))
- scenes[ SceneManager.GetActiveScene().buildIndex ] = SceneManager.GetActiveScene().name ;
- #else
- int sceneIndex = Application.loadedLevel;
- if (sceneIndex != -1 && string.IsNullOrEmpty(scenes[Application.loadedLevel]))
- scenes[Application.loadedLevel] = Application.loadedLevelName;
- #endif
- calculateStartIndex();
- if (!show && isGestureDone()) {
- doShow();
- }
- if (threadedLogs.Count > 0) {
- lock (threadedLogs) {
- for (int i = 0; i < threadedLogs.Count; i++) {
- Log l = threadedLogs[i];
- AddLog(l.condition, l.stacktrace, (LogType)l.logType);
- }
- threadedLogs.Clear();
- }
- }
- #if UNITY_CHANGE1
- float elapsed2 = Time.realtimeSinceStartup - lastUpdate2;
- if (elapsed2 > 1) {
- lastUpdate2 = Time.realtimeSinceStartup;
- //be sure no body else take control of log
- Application.RegisterLogCallback (new Application.LogCallback (CaptureLog));
- Application.RegisterLogCallbackThreaded (new Application.LogCallback (CaptureLogThread));
- }
- #endif
- // FPS Counter
- if (firstTime) {
- firstTime = false;
- lastUpdate = Time.realtimeSinceStartup;
- frames = 0;
- return;
- }
- frames++;
- float dt = Time.realtimeSinceStartup - lastUpdate;
- if (dt > updateInterval && frames > requiredFrames) {
- fps = (float)frames / dt;
- lastUpdate = Time.realtimeSinceStartup;
- frames = 0;
- }
- }
- void CaptureLog(string condition, string stacktrace, LogType type)
- {
- AddLog(condition, stacktrace, type);
- }
- void AddLog(string condition, string stacktrace, LogType type)
- {
- float memUsage = 0f;
- string _condition = "";
- if (cachedString.ContainsKey(condition)) {
- _condition = cachedString[condition];
- }
- else {
- _condition = condition;
- cachedString.Add(_condition, _condition);
- memUsage += (string.IsNullOrEmpty(_condition) ? 0 : _condition.Length * sizeof(char));
- memUsage += System.IntPtr.Size;
- }
- string _stacktrace = "";
- if (cachedString.ContainsKey(stacktrace)) {
- _stacktrace = cachedString[stacktrace];
- }
- else {
- _stacktrace = stacktrace;
- cachedString.Add(_stacktrace, _stacktrace);
- memUsage += (string.IsNullOrEmpty(_stacktrace) ? 0 : _stacktrace.Length * sizeof(char));
- memUsage += System.IntPtr.Size;
- }
- bool newLogAdded = false;
- addSample();
- Log log = new Log() { logType = (_LogType)type, condition = _condition, stacktrace = _stacktrace, sampleId = samples.Count - 1 };
- memUsage += log.GetMemoryUsage();
- //memUsage += samples.Count * 13 ;
- logsMemUsage += memUsage / 1024 / 1024;
- if (TotalMemUsage > maxSize) {
- clear();
- Debug.Log("Memory Usage Reach" + maxSize + " mb So It is Cleared");
- return;
- }
- bool isNew = false;
- //string key = _condition;// + "_!_" + _stacktrace ;
- if (logsDic.ContainsKey(_condition, stacktrace)) {
- isNew = false;
- logsDic[_condition][stacktrace].count++;
- }
- else {
- isNew = true;
- collapsedLogs.Add(log);
- logsDic[_condition][stacktrace] = log;
- if (type == LogType.Log)
- numOfCollapsedLogs++;
- else if (type == LogType.Warning)
- numOfCollapsedLogsWarning++;
- else
- numOfCollapsedLogsError++;
- }
- if (type == LogType.Log)
- numOfLogs++;
- else if (type == LogType.Warning)
- numOfLogsWarning++;
- else
- numOfLogsError++;
- logs.Add(log);
- if (!collapse || isNew) {
- bool skip = false;
- if (log.logType == _LogType.Log && !showLog)
- skip = true;
- if (log.logType == _LogType.Warning && !showWarning)
- skip = true;
- if (log.logType == _LogType.Error && !showError)
- skip = true;
- if (log.logType == _LogType.Assert && !showError)
- skip = true;
- if (log.logType == _LogType.Exception && !showError)
- skip = true;
- if (!skip) {
- if (string.IsNullOrEmpty(filterText) || log.condition.ToLower().Contains(filterText.ToLower())) {
- currentLog.Add(log);
- newLogAdded = true;
- }
- }
- }
- if (newLogAdded) {
- calculateStartIndex();
- int totalCount = currentLog.Count;
- int totalVisibleCount = (int)(Screen.height * 0.75f / size.y);
- if (startIndex >= (totalCount - totalVisibleCount))
- scrollPosition.y += size.y;
- }
- try {
- gameObject.SendMessage("OnLog", log);
- }
- catch (System.Exception e) {
- Debug.LogException(e);
- }
- }
- List<Log> threadedLogs = new List<Log>();
- void CaptureLogThread(string condition, string stacktrace, LogType type)
- {
- Log log = new Log() { condition = condition, stacktrace = stacktrace, logType = (_LogType)type };
- lock (threadedLogs) {
- threadedLogs.Add(log);
- }
- }
- //new scene is loaded
- void OnLevelWasLoaded()
- {
- if (clearOnNewSceneLoaded)
- clear();
- #if UNITY_CHANGE3
- currentScene = SceneManager.GetActiveScene().name ;
- Debug.Log( "Scene " + SceneManager.GetActiveScene().name + " is loaded");
- #else
- currentScene = Application.loadedLevelName;
- Debug.Log("Scene " + Application.loadedLevelName + " is loaded");
- #endif
- }
- //save user config
- void OnApplicationQuit()
- {
- PlayerPrefs.SetInt("Reporter_currentView", (int)currentView);
- PlayerPrefs.SetInt("Reporter_show", (show == true) ? 1 : 0);
- PlayerPrefs.SetInt("Reporter_collapse", (collapse == true) ? 1 : 0);
- PlayerPrefs.SetInt("Reporter_clearOnNewSceneLoaded", (clearOnNewSceneLoaded == true) ? 1 : 0);
- PlayerPrefs.SetInt("Reporter_showTime", (showTime == true) ? 1 : 0);
- PlayerPrefs.SetInt("Reporter_showScene", (showScene == true) ? 1 : 0);
- PlayerPrefs.SetInt("Reporter_showMemory", (showMemory == true) ? 1 : 0);
- PlayerPrefs.SetInt("Reporter_showFps", (showFps == true) ? 1 : 0);
- PlayerPrefs.SetInt("Reporter_showGraph", (showGraph == true) ? 1 : 0);
- PlayerPrefs.SetInt("Reporter_showLog", (showLog == true) ? 1 : 0);
- PlayerPrefs.SetInt("Reporter_showWarning", (showWarning == true) ? 1 : 0);
- PlayerPrefs.SetInt("Reporter_showError", (showError == true) ? 1 : 0);
- PlayerPrefs.SetString("Reporter_filterText", filterText);
- PlayerPrefs.SetFloat("Reporter_size", size.x);
- PlayerPrefs.SetInt("Reporter_showClearOnNewSceneLoadedButton", (showClearOnNewSceneLoadedButton == true) ? 1 : 0);
- PlayerPrefs.SetInt("Reporter_showTimeButton", (showTimeButton == true) ? 1 : 0);
- PlayerPrefs.SetInt("Reporter_showSceneButton", (showSceneButton == true) ? 1 : 0);
- PlayerPrefs.SetInt("Reporter_showMemButton", (showMemButton == true) ? 1 : 0);
- PlayerPrefs.SetInt("Reporter_showFpsButton", (showFpsButton == true) ? 1 : 0);
- PlayerPrefs.SetInt("Reporter_showSearchText", (showSearchText == true) ? 1 : 0);
- PlayerPrefs.Save();
- }
- //read build information
- IEnumerator readInfo()
- {
- string prefFile = "build_info.txt";
- string url = prefFile;
- if (prefFile.IndexOf("://") == -1) {
- string streamingAssetsPath = Application.streamingAssetsPath;
- if (streamingAssetsPath == "")
- streamingAssetsPath = Application.dataPath + "/StreamingAssets/";
- url = System.IO.Path.Combine(streamingAssetsPath, prefFile);
- }
- if (Application.platform != RuntimePlatform.WebGLPlayer)
- if (!url.Contains("://"))
- url = "file://" + url;
- // float startTime = Time.realtimeSinceStartup;
- WWW www = new WWW(url);
- yield return www;
- if (!string.IsNullOrEmpty(www.error)) {
- Debug.LogError(www.error);
- }
- else {
- buildDate = www.text;
- }
- yield break;
- }
- }
|