protected override void JavaFinalize()
 {
     if (!mFinished)
     {
         Finish("Request on the loose");
         VolleyLog.E("Marker log finalized without finish() - uncaught exit point for request");
     }
 }
        public void Finish(String header)
        {
            mFinished = true;

            long duration = GetTotalDuration();

            if (duration <= MIN_DURATION_FOR_LOGGING_MS)
            {
                return;
            }

            long prevTime = mMarkers.First().time;

            VolleyLog.D("({0:F4} ms) {1}", duration, header);
            foreach (Marker marker in mMarkers)
            {
                long thisTime = marker.time;
                VolleyLog.D("+{0:F4} [{1:2}] {2}", (thisTime - prevTime), marker.thread, marker.name);
                prevTime = thisTime;
            }
        }
        private static String BuildMessage(String format, params object[] args)
        {
            String msg   = (args == null) ? format : String.Format(format, args);
            var    trace = new Java.Lang.Throwable().FillInStackTrace().GetStackTrace();

            String caller = "<unknown>";

            Java.Lang.Class volleyLogClass = new VolleyLog().Class;

            for (int i = 2; i < trace.Length; i++)
            {
                var clazz = trace[i].Class;
                if (!clazz.Equals(volleyLogClass))
                {
                    String callingClass = trace[i].ClassName;
                    callingClass = callingClass.Substring(callingClass.LastIndexOf('.') + 1);
                    callingClass = callingClass.Substring(callingClass.LastIndexOf('$') + 1);

                    caller = callingClass + "." + trace[i].MethodName;
                    break;
                }
            }
            return(String.Format("[{0}] {1}:{2}", Thread.CurrentThread.ManagedThreadId, caller, msg));
        }
        private static String BuildMessage(String format, params object[] args)
        {
            String msg = (args == null) ? format : String.Format(format, args);
            var trace = new Java.Lang.Throwable().FillInStackTrace().GetStackTrace();

            String caller = "<unknown>";
            Java.Lang.Class volleyLogClass = new VolleyLog().Class;

            for (int i = 2; i < trace.Length; i++)
            {
                var clazz = trace[i].Class;
                if (!clazz.Equals(volleyLogClass))
                {
                    String callingClass = trace[i].ClassName;
                    callingClass = callingClass.Substring(callingClass.LastIndexOf('.') + 1);
                    callingClass = callingClass.Substring(callingClass.LastIndexOf('$') + 1);

                    caller = callingClass + "." + trace[i].MethodName;
                    break;
                }
            }
            return String.Format("[{0}] {1}:{2}", Thread.CurrentThread.ManagedThreadId, caller, msg);
        }