view Implab/Diagnostics/LogicalOperation.cs @ 207:558f34b2fb50 v2

added Safe.DispatchEvent() a legacy equivalent for '?.Invoke()' added Safe.Dispose(IEnumerable) added PromiseExtensions.CancellationPoint to add a cancellation point to the chain of promises added IPromise<T> PromiseExtensions.Then<T>(this IPromise<T> that, Action<T> success) overloads added PromiseExtensions.Error() overloads to handle a error or(and) a cancellation
author cin
date Wed, 09 Nov 2016 12:03:22 +0300
parents 4c0e5ef99986
children
line wrap: on
line source

using System;

namespace Implab.Diagnostics {
    public class LogicalOperation {
        public static readonly LogicalOperation EMPTY = new LogicalOperation("__EMPTY__", null);

        readonly LogicalOperation m_parent;
        readonly string m_name;
        readonly int m_level;
        readonly int m_timestamp;

        public LogicalOperation()
            : this(null, null) {
        }

        public LogicalOperation(string name, LogicalOperation parent) {
            m_name = name ?? String.Empty;
            m_parent = parent;

            m_level = parent == null ? 0 : parent.Level + 1;
            m_timestamp = Environment.TickCount;
        }

        public int Duration {
            get {
                var dt = Environment.TickCount - m_timestamp;
                return dt < 0 ? int.MaxValue + dt : dt; // handle overflow
            }
        }

        public LogicalOperation Parent {
            get {
                return m_parent;
            }
        }

        public int Level {
            get { return m_level; }
        }

        public string Name {
            get { return m_name; }
        }
    }
}