Re: [PATCH 03/12] qxl-wddm-dod: Introduce TimeMeasurement class for timing debugging

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On Tue, Mar 21, 2017 at 2:04 PM, Frediano Ziglio <fziglio@xxxxxxxxxx> wrote:
>
> In release build this class resolved to empty statements.
> In debug build it is useful for measurement of execution time.
>
> Signed-off-by: Yuri Benditovich <yuri.benditovich@xxxxxxxxxx>
> ---
>  qxldod/QxlDod.h | 35 +++++++++++++++++++++++++++++++++++
>  1 file changed, 35 insertions(+)
>
> diff --git a/qxldod/QxlDod.h b/qxldod/QxlDod.h
> index f441f4b..324b940 100755
> --- a/qxldod/QxlDod.h
> +++ b/qxldod/QxlDod.h
> @@ -225,6 +225,41 @@ typedef struct _CURRENT_BDD_MODE
>      } FrameBuffer;
>  } CURRENT_BDD_MODE;
>
> +#if DBG
> +class TimeMeasurement
> +{
> +public:
> +    TimeMeasurement()
> +    {
> +        Start();
> +    }
> +    void Start()
> +    {
> +        KeQuerySystemTime(&li1);
> +    }
> +    void Stop()
> +    {
> +        KeQuerySystemTime(&li2);
> +    }
> +    ULONG Diff()
> +    {
> +        return (ULONG)((li2.QuadPart - li1.QuadPart) / 10000);
> +    }
> +protected:

This seems to indicate that the class is written to be a base
class but there's no virtual destructor.

This just indicated that these members are not intended to be accessed directly.
No derived classes in plans.
 

> +    LARGE_INTEGER li1;
> +    LARGE_INTEGER li2;
> +};
> +#else
> +class TimeMeasurement
> +{
> +public:
> +    TimeMeasurement() {}
> +    void Start() {}
> +    void Stop() {}
> +    ULONG Diff() { return 0; }
> +};
> +#endif
> +

It's also possible to use the class in weird way having negative numbers
(just call Start after Stop). Would not something like this prevent these issues?

class TimeMeasurement
{
public:
    TimeMeasurement()
    {
#if DBG
        KeQuerySystemTime(&li_start);
#endif
    }
    ULONG Elapsed() const
    {
#if DBG
        LARGE_INTEGER li_end;
        KeQuerySystemTime(&li_end);
        return (ULONG)((li_end.QuadPart - li_end.QuadPart) / 10000);
#else
        return 0;
#endif
    }
private:
#if DBG
    LARGE_INTEGER li1;
#endif
};

This way is much less easy when used during debugging/profiling
in different procedures. Declaring several timers at single line of the code does not allow
to start and stop each one of them when needed. During profiling different timers are
started/stopped independently and printed together.  

>  class QxlDod;
>
>  class HwDeviceInterface {

Frediano

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]