1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122 |
- #if UNITY_CHANGE1 || UNITY_CHANGE2 || UNITY_CHANGE3 || UNITY_CHANGE4
- #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
- #if UNITY_2018_3_OR_NEWER
- #define UNITY_CHANGE4
- #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)
- //use UNITY_CHANGE4 for unity 2018.3 (Networking system)
- using UnityEngine;
- using System.IO;
- using System.Collections;
- using System.Collections.Generic;
- #if UNITY_CHANGE3
- using UnityEngine.SceneManagement;
- #endif
- #if UNITY_CHANGE4
- using UnityEngine.Networking;
- #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 saveLogsImage;
- public Texture2D searchImage;
- public Texture2D copyImage;
- 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 (loadedScene == 255)
- return "AssetBundleScene";
- return scenes[loadedScene];
- }
- }
- List<Sample> samples = new List<Sample>();
- 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;
- bool showCopyButton = true;
- bool showSaveButton = 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 saveLogsContent;
- GUIContent searchContent;
- GUIContent copyContent;
- 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();
- #if UNITY_CHANGE3
- SceneManager.sceneLoaded += _OnLevelWasLoaded;
- #endif
- }
- private void OnDestroy()
- {
- #if UNITY_CHANGE3
- SceneManager.sceneLoaded -= _OnLevelWasLoaded;
- #endif
- }
- 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");
- saveLogsContent = new GUIContent("", images.saveLogsImage, "Save logs to device");
- searchContent = new GUIContent("", images.searchImage, "Search for logs");
- copyContent = new GUIContent("", images.copyImage, "Copy log to clipboard");
- 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;
- showCopyButton = (PlayerPrefs.GetInt("Reporter_showCopyButton", 1) == 1) ? true : false;
- showSaveButton = (PlayerPrefs.GetInt("Reporter_showSaveButton", 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.zero;
- Rect toolBarRect = Rect.zero;
- Rect logsRect = Rect.zero;
- Rect stackRect = Rect.zero;
- Rect graphRect = Rect.zero;
- Rect graphMinRect = Rect.zero;
- Rect graphMaxRect = Rect.zero;
- Rect buttomRect = Rect.zero ;
- Vector2 stackRectTopLeft;
- Rect detailRect = Rect.zero;
- 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.zero;
- Rect timeRect = Rect.zero;
- Rect timeLabelRect = Rect.zero;
- Rect sceneRect = Rect.zero;
- Rect sceneLabelRect = Rect.zero;
- Rect memoryRect = Rect.zero;
- Rect memoryLabelRect = Rect.zero;
- Rect fpsRect = Rect.zero;
- Rect fpsLabelRect = Rect.zero;
- 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;
- }
- if (GUILayout.Button(copyContent, (showCopyButton) ? buttonActiveStyle : barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2)))
- {
- showCopyButton = !showCopyButton;
- }
- if (GUILayout.Button(saveLogsContent, (showSaveButton) ? buttonActiveStyle : barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2)))
- {
- showSaveButton = !showSaveButton;
- }
- 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 (showCopyButton)
- {
- if (GUILayout.Button(copyContent, barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2)))
- {
- if (selectedLog == null)
- GUIUtility.systemCopyBuffer = "No log selected";
- else
- GUIUtility.systemCopyBuffer = selectedLog.condition + System.Environment.NewLine + System.Environment.NewLine + selectedLog.stacktrace;
- }
- }
- if (showSaveButton)
- {
- if (GUILayout.Button(saveLogsContent, barStyle, GUILayout.Width(size.x * 2), GUILayout.Height(size.y * 2)))
- {
- SaveLogsToDevice();
- }
- }
- 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);
- }
- }
- #if !UNITY_CHANGE3
- class Scene
- {
- }
- class LoadSceneMode
- {
- }
- void OnLevelWasLoaded()
- {
- _OnLevelWasLoaded( null );
- }
- #endif
- //new scene is loaded
- void _OnLevelWasLoaded( Scene _null1 , LoadSceneMode _null2 )
- {
- 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";
- 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.OSXWebPlayer && Application.platform != RuntimePlatform.WindowsWebPlayer)
- if (!url.Contains("://"))
- url = "file://" + url;
- // float startTime = Time.realtimeSinceStartup;
- #if UNITY_CHANGE4
- UnityWebRequest www = UnityWebRequest.Get(url);
- yield return www.SendWebRequest();
- #else
- WWW www = new WWW(url);
- yield return www;
- #endif
- if (!string.IsNullOrEmpty(www.error)) {
- Debug.LogError(www.error);
- }
- else {
- #if UNITY_CHANGE4
- buildDate = www.downloadHandler.text;
- #else
- buildDate = www.text;
- #endif
- }
- yield break;
- }
- private void SaveLogsToDevice()
- {
- string filePath = Application.persistentDataPath + "/logs.txt";
- List<string> fileContentsList = new List<string>();
- Debug.Log("Saving logs to " + filePath);
- File.Delete(filePath);
- for (int i = 0; i < logs.Count; i++)
- {
- fileContentsList.Add(logs[i].logType + "\n" + logs[i].condition + "\n" + logs[i].stacktrace);
- }
- File.WriteAllLines(filePath, fileContentsList.ToArray());
- }
- }
|