<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 21, 2017 at 2:04 PM, Frediano Ziglio <span dir="ltr"><<a href="mailto:fziglio@redhat.com" target="_blank">fziglio@redhat.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="m_8361624258614845606m_-6569037169330864196HOEnZb"><div class="m_8361624258614845606m_-6569037169330864196h5">><br>
> In release build this class resolved to empty statements.<br>
> In debug build it is useful for measurement of execution time.<br>
><br>
> Signed-off-by: Yuri Benditovich <<a href="mailto:yuri.benditovich@daynix.com" target="_blank">yuri.benditovich@daynix.com</a>><br>
> ---<br>
>  qxldod/QxlDod.h | 35 ++++++++++++++++++++++++++++++<wbr>+++++<br>
>  1 file changed, 35 insertions(+)<br>
><br>
> diff --git a/qxldod/QxlDod.h b/qxldod/QxlDod.h<br>
> index f441f4b..324b940 100755<br>
> --- a/qxldod/QxlDod.h<br>
> +++ b/qxldod/QxlDod.h<br>
> @@ -225,6 +225,41 @@ typedef struct _CURRENT_BDD_MODE<br>
>      } FrameBuffer;<br>
>  } CURRENT_BDD_MODE;<br>
><br>
> +#if DBG<br>
> +class TimeMeasurement<br>
> +{<br>
> +public:<br>
> +    TimeMeasurement()<br>
> +    {<br>
> +        Start();<br>
> +    }<br>
> +    void Start()<br>
> +    {<br>
> +        KeQuerySystemTime(&li1);<br>
> +    }<br>
> +    void Stop()<br>
> +    {<br>
> +        KeQuerySystemTime(&li2);<br>
> +    }<br>
> +    ULONG Diff()<br>
> +    {<br>
> +        return (ULONG)((li2.QuadPart - li1.QuadPart) / 10000);<br>
> +    }<br>
> +protected:<br>
<br>
</div></div>This seems to indicate that the class is written to be a base<br>
class but there's no virtual destructor.<br></blockquote><div><br></div><div>This just indicated that these members are not intended to be accessed directly.</div><div>No derived classes in plans.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span><br>
> +    LARGE_INTEGER li1;<br>
> +    LARGE_INTEGER li2;<br>
> +};<br>
> +#else<br>
> +class TimeMeasurement<br>
> +{<br>
> +public:<br>
> +    TimeMeasurement() {}<br>
> +    void Start() {}<br>
> +    void Stop() {}<br>
> +    ULONG Diff() { return 0; }<br>
> +};<br>
> +#endif<br>
> +<br>
<br>
</span>It's also possible to use the class in weird way having negative numbers<br>
(just call Start after Stop). Would not something like this prevent these issues?<br>
<br>
class TimeMeasurement<br>
{<br>
public:<br>
    TimeMeasurement()<br>
    {<br>
#if DBG<br>
        KeQuerySystemTime(&li_start);<br>
#endif<br>
    }<br>
    ULONG Elapsed() const<br>
    {<br>
#if DBG<br>
        LARGE_INTEGER li_end;<br>
        KeQuerySystemTime(&li_end);<br>
        return (ULONG)((li_end.QuadPart - li_end.QuadPart) / 10000);<br>
#else<br>
        return 0;<br>
#endif<br>
    }<br>
private:<br>
#if DBG<br>
    LARGE_INTEGER li1;<br>
#endif<br>
};<br>
<br></blockquote><div>This way is much less easy when used during debugging/profiling</div><div>in different procedures. Declaring several timers at single line of the code does not allow</div><div>to start and stop each one of them when needed. During profiling different timers are</div><div>started/stopped independently and printed together.  </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
>  class QxlDod;<br>
><br>
>  class HwDeviceInterface {<br>
<span class="m_8361624258614845606m_-6569037169330864196HOEnZb"><font color="#888888"><br>
Frediano<br>
</font></span></blockquote></div><br></div></div>