/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ // Original file Copyright Crytek GMBH or its affiliates, used under license. using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Diagnostics.CodeAnalysis; namespace Aga.Controls { /// /// High resolution timer, used to test performance /// public static class TimeCounter { private static Int64 _start; /// /// Start time counting /// public static void Start() { _start = 0; QueryPerformanceCounter(ref _start); } public static Int64 GetStartValue() { Int64 t = 0; QueryPerformanceCounter(ref t); return t; } /// /// Finish time counting /// /// time in seconds elapsed from Start till Finish public static double Finish() { return Finish(_start); } public static double Finish(Int64 start) { Int64 finish = 0; QueryPerformanceCounter(ref finish); Int64 freq = 0; QueryPerformanceFrequency(ref freq); return (finish - start) / (double)freq; } [DllImport("Kernel32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool QueryPerformanceCounter(ref Int64 performanceCount); [DllImport("Kernel32.dll")] [return: MarshalAs(UnmanagedType.Bool)] static extern bool QueryPerformanceFrequency(ref Int64 frequency); } }