You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by Chuck Rolke <cr...@redhat.com> on 2015/11/11 16:54:52 UTC

Re: [1/3] qpid-proton git commit: NO-JIRA: c++: Speed up recurring_timer example.

This commit seems a bit heavy to be NO-JIRA as it breaks my windows builds several ways.

Compile error:
=============
fixed

Syntax error:
============
Python 2.6.1 complains about:

13:   File "C:/Jenkins/workspace/proton-c-master-windows/examples/cpp/example_test.py", line 228
13:     env = {k: v for k,v in os.environ.iteritems() if k != "VALGRIND"}
13:                   ^

Python 2.7.1 is fine with this. 2.6 works with simpler iteration constructs.

Self test fail:
==============
The test_recurring_time (on my single try) fails with an extra "Tock..." after the first "Tick...".

-Chuck


----- Original Message -----
> From: aconway@apache.org
> To: commits@qpid.apache.org
> Sent: Tuesday, November 10, 2015 5:43:51 PM
> Subject: [1/3] qpid-proton git commit: NO-JIRA: c++: Speed up recurring_timer example.
> 
> Repository: qpid-proton
> Updated Branches:
>   refs/heads/master 1b1b2e596 -> 01e136cc6
> 
> 
> NO-JIRA: c++: Speed up recurring_timer example.
> 
> 
> Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
> Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/b131dc19
> Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/b131dc19
> Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/b131dc19
> 
> Branch: refs/heads/master
> Commit: b131dc199f7f2c69a14587e45b6feaf741b53610
> Parents: 1b1b2e5
> Author: Alan Conway <ac...@redhat.com>
> Authored: Thu Nov 5 10:22:49 2015 -0500
> Committer: Alan Conway <ac...@redhat.com>
> Committed: Tue Nov 10 17:06:27 2015 -0500
> 
> ----------------------------------------------------------------------
>  examples/cpp/CMakeLists.txt      |  2 +-
>  examples/cpp/example_test.py     | 17 ++++++++++++++---
>  examples/cpp/recurring_timer.cpp | 29 ++++++++++++++---------------
>  3 files changed, 29 insertions(+), 19 deletions(-)
> ----------------------------------------------------------------------
> 
> 
> http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b131dc19/examples/cpp/CMakeLists.txt
> ----------------------------------------------------------------------
> diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt
> index 3e5dafe..8916963 100644
> --- a/examples/cpp/CMakeLists.txt
> +++ b/examples/cpp/CMakeLists.txt
> @@ -60,7 +60,7 @@ else(WIN32)
>  endif(WIN32)
>  
>  add_test(NAME cpp_example_test
> -  COMMAND ${PYTHON_EXECUTABLE} ${env_py} -- "PATH=${test_path}"
> "PYTHONPATH=${CMAKE_CURRENT_SOURCE_DIR}" ${VALGRIND_ENV}
> ${PYTHON_EXECUTABLE} -m unittest -v example_test)
> +  COMMAND ${PYTHON_EXECUTABLE} ${env_py} -- "PATH=${test_path}"
> ${VALGRIND_ENV} ${PYTHON_EXECUTABLE}
> ${CMAKE_CURRENT_SOURCE_DIR}/example_test.py -v)
>  
>  set(broker_tests example_test.ExampleTest.test_request_response
>  example_test.ExampleTest.test_simple_send_recv)
>  
> 
> http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b131dc19/examples/cpp/example_test.py
> ----------------------------------------------------------------------
> diff --git a/examples/cpp/example_test.py b/examples/cpp/example_test.py
> index 3ed8b9c..f51cf57 100644
> --- a/examples/cpp/example_test.py
> +++ b/examples/cpp/example_test.py
> @@ -23,6 +23,7 @@ import unittest
>  import os, sys, socket, time
>  from  random import randrange
>  from subprocess import Popen, PIPE, STDOUT
> +from copy import copy
>  import platform
>  
>  def cmdline(*args):
> @@ -215,14 +216,24 @@ Values: map{string(k1):int(42),
> symbol(k2):boolean(false)}
>          self.assertEqual(expect, execute("encode_decode"))
>  
>      def test_recurring_timer(self):
> -        expect="""Tick...
> +        # Disable valgrind, this test is time-sensitive.
> +        env = {k: v for k,v in os.environ.iteritems() if k != "VALGRIND"}
> +        env, os.environ = os.environ, env
> +        try:
> +            expect="""Tick...
> +Tick...
> +Tock...
> +Tick...
> +Tock...
>  Tick...
>  Tock...
>  Tick...
>  Tock...
>  """
> -        self.maxDiff = None
> -        self.assertEqual(expect, execute("recurring_timer", "-t", "3"))
> +            self.maxDiff = None
> +            self.assertEqual(expect, execute("recurring_timer", "-t", ".01",
> "-k", ".001"))
> +        finally:
> +            os.environ = env    # Restore environment
>  
>  if __name__ == "__main__":
>      unittest.main()
> 
> http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b131dc19/examples/cpp/recurring_timer.cpp
> ----------------------------------------------------------------------
> diff --git a/examples/cpp/recurring_timer.cpp
> b/examples/cpp/recurring_timer.cpp
> index b6141fd..37cbfed 100644
> --- a/examples/cpp/recurring_timer.cpp
> +++ b/examples/cpp/recurring_timer.cpp
> @@ -43,53 +43,52 @@ class tocker : public proton::messaging_handler {
>  
>  class recurring : public proton::messaging_handler {
>    private:
> -    int remaining_secs;
> +    int remaining_msecs, tick_ms;
>      ticker tick_handler;
>      tocker tock_handler;
>      proton::task *cancel_task;
>    public:
>  
> -    recurring(int secs) : remaining_secs(secs), cancel_task(0) {}
> +    recurring(int msecs, int tickms) : remaining_msecs(msecs),
> tick_ms(tickms), cancel_task(0) {}
>  
>      proton::task& ticktock(proton::event &e) {
>          // Show timer events in separate handlers.
> -        e.container().schedule(250, &tick_handler);
> -        return e.container().schedule(750, &tock_handler);
> +        e.container().schedule(tick_ms, &tick_handler);
> +        return e.container().schedule(tick_ms * 3, &tock_handler);
>      }
>  
>      void on_start(proton::event &e) {
> -        if (remaining_secs <= 0)
> +        if (remaining_msecs <= 0)
>              return;
>          proton::task& first_tock = ticktock(e);
> -        e.container().schedule(1000);
> -        remaining_secs--;
>          // Show a cancel operation.
>          cancel_task = &first_tock;
> -        e.container().schedule(500);
> +        e.container().schedule(tick_ms);
>      }
>  
>      void on_timer_task(proton::event &e) {
>          if (cancel_task) {
>              cancel_task->cancel();
>              cancel_task = 0;
> -            return;
>          }
> -        if (remaining_secs) {
> +        remaining_msecs -= tick_ms * 2;
> +        if (remaining_msecs > 0) {
>              ticktock(e);
> -            e.container().schedule(1000);
> -            remaining_secs--;
> +            e.container().schedule(tick_ms * 4);
>          }
>      }
>  };
>  
>  int main(int argc, char **argv) {
>      // Command line options
> -    int running_time_in_secs = 5;
> +    double running_time = 5;
> +    double tick = 0.25;
>      options opts(argc, argv);
> -    opts.add_value(running_time_in_secs, 't', "running time", "running time
> in seconds", "RUNTIME");
> +    opts.add_value(running_time, 't', "running time", "running time in
> seconds", "RUNTIME");
> +    opts.add_value(tick, 'k', "tick time", "tick time as fraction of
> second", "TICK");
>      try {
>          opts.parse();
> -        recurring recurring_handler(running_time_in_secs);
> +        recurring recurring_handler(running_time * 1000, tick * 1000);
>          proton::container(recurring_handler).run();
>          return 0;
>      } catch (const bad_option& e) {
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
> For additional commands, e-mail: commits-help@qpid.apache.org
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org