// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the Apache 2.0 License.
// See the LICENSE file in the project root for more information. 

#if !NO_STOPWATCH
using System.Diagnostics;

namespace System.Reactive.Concurrency
{
    //
    // WARNING: This code is kept *identically* in two places. One copy is kept in System.Reactive.Core for non-PLIB platforms.
    //          Another copy is kept in System.Reactive.PlatformServices to enlighten the default lowest common denominator
    //          behavior of Rx for PLIB when used on a more capable platform.
    //
    internal class DefaultStopwatch/*Impl*/ : IStopwatch
    {
        private readonly Stopwatch _sw;

        public DefaultStopwatch()
        {
            _sw = Stopwatch.StartNew();
        }

        public TimeSpan Elapsed
        {
            get { return _sw.Elapsed; }
        }
    }
}
#else
namespace System.Reactive.Concurrency
{
    // This class is only used on Silverlight in the browser. It mimicks !Stopwatch.HighResolution behavior and suffers from
    // use of absolute time. See work item 486045.
    internal class DefaultStopwatch : IStopwatch
    {
        private readonly DateTime _start;

        public DefaultStopwatch()
        {
            _start = DateTime.UtcNow;
        }

        public TimeSpan Elapsed
        {
            get { return DateTime.UtcNow - _start; }
        }
    }
}
#endif