[rtems commit] tmtests/tmfine01: New test
Joel Sherrill
joel.sherrill at oarcorp.com
Mon Mar 16 12:56:54 UTC 2015
This looks like an SMP test. What happens on a uniprocessor build?
On March 16, 2015 7:52:53 AM CDT, Sebastian Huber <sebh at rtems.org> wrote:
>Module: rtems
>Branch: master
>Commit: dc5e5f44485b8f9709da767f79595d2fa8aff74d
>Changeset:
>http://git.rtems.org/rtems/commit/?id=dc5e5f44485b8f9709da767f79595d2fa8aff74d
>
>Author: Sebastian Huber <sebastian.huber at embedded-brains.de>
>Date: Mon Mar 16 13:52:19 2015 +0100
>
>tmtests/tmfine01: New test
>
>---
>
> testsuites/tmtests/Makefile.am | 1 +
> testsuites/tmtests/configure.ac | 1 +
> testsuites/tmtests/tmfine01/Makefile.am | 19 +
> testsuites/tmtests/tmfine01/init.c | 478 +++++++
> testsuites/tmtests/tmfine01/tmfine01.doc | 21 +
>testsuites/tmtests/tmfine01/tmfine01.scn | 2092
>++++++++++++++++++++++++++++++
> 6 files changed, 2612 insertions(+)
>
>diff --git a/testsuites/tmtests/Makefile.am
>b/testsuites/tmtests/Makefile.am
>index bab9e80..c1eb7b5 100644
>--- a/testsuites/tmtests/Makefile.am
>+++ b/testsuites/tmtests/Makefile.am
>@@ -4,6 +4,7 @@ _SUBDIRS = tmck tmoverhd tm01 tm02 tm03 tm04 tm05 tm06
>tm07 tm08 tm09 tm10 \
>tm11 tm12 tm13 tm14 tm15 tm16 tm17 tm18 tm19 tm20 tm21 tm22 tm23 tm24 \
> tm25 tm26 tm27 tm28 tm29 tm30 tm31 tm32 tm33 tm34 tm35 tm36
> _SUBDIRS += tmcontext01
>+_SUBDIRS += tmfine01
>
> include $(top_srcdir)/../automake/test-subdirs.am
> include $(top_srcdir)/../automake/local.am
>diff --git a/testsuites/tmtests/configure.ac
>b/testsuites/tmtests/configure.ac
>index 3b33445..5c6138e 100644
>--- a/testsuites/tmtests/configure.ac
>+++ b/testsuites/tmtests/configure.ac
>@@ -27,6 +27,7 @@ AC_SUBST(OPERATION_COUNT)
>
> # Explicitly list all Makefiles here
> AC_CONFIG_FILES([Makefile
>+tmfine01/Makefile
> tmcontext01/Makefile
> tmck/Makefile
> tmoverhd/Makefile
>diff --git a/testsuites/tmtests/tmfine01/Makefile.am
>b/testsuites/tmtests/tmfine01/Makefile.am
>new file mode 100644
>index 0000000..d6db7c8
>--- /dev/null
>+++ b/testsuites/tmtests/tmfine01/Makefile.am
>@@ -0,0 +1,19 @@
>+rtems_tests_PROGRAMS = tmfine01
>+tmfine01_SOURCES = init.c
>+
>+dist_rtems_tests_DATA = tmfine01.scn tmfine01.doc
>+
>+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP at .cfg
>+include $(top_srcdir)/../automake/compile.am
>+include $(top_srcdir)/../automake/leaf.am
>+
>+AM_CPPFLAGS += -I$(top_srcdir)/../support/include
>+
>+LINK_OBJS = $(tmfine01_OBJECTS)
>+LINK_LIBS = $(tmfine01_LDLIBS)
>+
>+tmfine01$(EXEEXT): $(tmfine01_OBJECTS) $(tmfine01_DEPENDENCIES)
>+ @rm -f tmfine01$(EXEEXT)
>+ $(make-exe)
>+
>+include $(top_srcdir)/../automake/local.am
>diff --git a/testsuites/tmtests/tmfine01/init.c
>b/testsuites/tmtests/tmfine01/init.c
>new file mode 100644
>index 0000000..ed5f429
>--- /dev/null
>+++ b/testsuites/tmtests/tmfine01/init.c
>@@ -0,0 +1,478 @@
>+/*
>+ * Copyright (c) 2015 embedded brains GmbH. All rights reserved.
>+ *
>+ * embedded brains GmbH
>+ * Dornierstr. 4
>+ * 82178 Puchheim
>+ * Germany
>+ * <rtems at embedded-brains.de>
>+ *
>+ * The license and distribution terms for this file may be
>+ * found in the file LICENSE in this distribution or at
>+ * http://www.rtems.org/license/LICENSE.
>+ */
>+
>+#ifdef HAVE_CONFIG_H
>+ #include "config.h"
>+#endif
>+
>+#include "tmacros.h"
>+
>+#include <stdio.h>
>+#include <inttypes.h>
>+
>+#include <rtems/test.h>
>+
>+const char rtems_test_name[] = "TMFINE 1";
>+
>+#define CPU_COUNT 32
>+
>+#define MSG_COUNT 3
>+
>+typedef struct {
>+ uint32_t value;
>+} test_msg;
>+
>+typedef struct {
>+ rtems_test_parallel_context base;
>+ rtems_id master;
>+ rtems_id sema[CPU_COUNT];
>+ rtems_id mq[CPU_COUNT];
>+ uint32_t self_event_ops[CPU_COUNT][CPU_COUNT];
>+ uint32_t all_to_one_event_ops[CPU_COUNT][CPU_COUNT];
>+ uint32_t one_mutex_ops[CPU_COUNT][CPU_COUNT];
>+ uint32_t many_mutex_ops[CPU_COUNT][CPU_COUNT];
>+ uint32_t self_msg_ops[CPU_COUNT][CPU_COUNT];
>+ uint32_t many_to_one_msg_ops[CPU_COUNT][CPU_COUNT];
>+} test_context;
>+
>+static test_context test_instance;
>+
>+static rtems_interval test_duration(void)
>+{
>+ return rtems_clock_get_ticks_per_second();
>+}
>+
>+static rtems_interval test_init(
>+ rtems_test_parallel_context *base,
>+ void *arg,
>+ size_t active_workers
>+)
>+{
>+ return test_duration();
>+}
>+
>+static void test_fini(
>+ const char *name,
>+ uint32_t *counters,
>+ size_t active_workers
>+)
>+{
>+ size_t i;
>+
>+ printf(" <%s activeWorker=\"%zu\">\n", name, active_workers);
>+
>+ for (i = 0; i < active_workers; ++i) {
>+ printf(
>+ " <Counter worker=\"%zu\">%" PRIu32 "</Counter>\n",
>+ i,
>+ counters[i]
>+ );
>+ }
>+
>+ printf(" </%s>\n", name);
>+}
>+
>+static void test_self_event_body(
>+ rtems_test_parallel_context *base,
>+ void *arg,
>+ size_t active_workers,
>+ size_t worker_index
>+)
>+{
>+ test_context *ctx = (test_context *) base;
>+ rtems_id id = rtems_task_self();
>+ uint32_t counter = 0;
>+
>+ while (!rtems_test_parallel_stop_job(&ctx->base)) {
>+ rtems_status_code sc;
>+ rtems_event_set out;
>+
>+ ++counter;
>+
>+ sc = rtems_event_send(id, RTEMS_EVENT_0);
>+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
>+
>+ sc = rtems_event_receive(
>+ RTEMS_EVENT_0,
>+ RTEMS_WAIT | RTEMS_EVENT_ANY,
>+ RTEMS_NO_TIMEOUT,
>+ &out
>+ );
>+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
>+ }
>+
>+ ctx->self_event_ops[active_workers - 1][worker_index] = counter;
>+}
>+
>+static void test_self_event_fini(
>+ rtems_test_parallel_context *base,
>+ void *arg,
>+ size_t active_workers
>+)
>+{
>+ test_context *ctx = (test_context *) base;
>+
>+ test_fini(
>+ "SelfEvent",
>+ &ctx->self_event_ops[active_workers - 1][0],
>+ active_workers
>+ );
>+}
>+
>+static void test_all_to_one_event_body(
>+ rtems_test_parallel_context *base,
>+ void *arg,
>+ size_t active_workers,
>+ size_t worker_index
>+)
>+{
>+ test_context *ctx = (test_context *) base;
>+ rtems_id id = rtems_task_self();
>+ bool is_master = rtems_test_parallel_is_master_worker(worker_index);
>+ uint32_t counter = 0;
>+
>+ while (!rtems_test_parallel_stop_job(&ctx->base)) {
>+ rtems_status_code sc;
>+
>+ ++counter;
>+
>+ sc = rtems_event_send(id, RTEMS_EVENT_0);
>+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
>+
>+ if (is_master) {
>+ rtems_event_set out;
>+
>+ sc = rtems_event_receive(
>+ RTEMS_ALL_EVENTS,
>+ RTEMS_WAIT | RTEMS_EVENT_ANY,
>+ RTEMS_NO_TIMEOUT,
>+ &out
>+ );
>+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
>+ }
>+ }
>+
>+ ctx->all_to_one_event_ops[active_workers - 1][worker_index] =
>counter;
>+}
>+
>+static void test_all_to_one_event_fini(
>+ rtems_test_parallel_context *base,
>+ void *arg,
>+ size_t active_workers
>+)
>+{
>+ test_context *ctx = (test_context *) base;
>+
>+ test_fini(
>+ "AllToOneEvent",
>+ &ctx->all_to_one_event_ops[active_workers - 1][0],
>+ active_workers
>+ );
>+}
>+
>+static void test_one_mutex_body(
>+ rtems_test_parallel_context *base,
>+ void *arg,
>+ size_t active_workers,
>+ size_t worker_index
>+)
>+{
>+ test_context *ctx = (test_context *) base;
>+ rtems_id id = ctx->sema[0];
>+ uint32_t counter = 0;
>+
>+ while (!rtems_test_parallel_stop_job(&ctx->base)) {
>+ rtems_status_code sc;
>+
>+ ++counter;
>+
>+ sc = rtems_semaphore_obtain(id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
>+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
>+
>+ sc = rtems_semaphore_release(id);
>+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
>+ }
>+
>+ ctx->one_mutex_ops[active_workers - 1][worker_index] = counter;
>+}
>+
>+static void test_one_mutex_fini(
>+ rtems_test_parallel_context *base,
>+ void *arg,
>+ size_t active_workers
>+)
>+{
>+ test_context *ctx = (test_context *) base;
>+
>+ test_fini(
>+ "OneMutex",
>+ &ctx->one_mutex_ops[active_workers - 1][0],
>+ active_workers
>+ );
>+}
>+
>+static void test_many_mutex_body(
>+ rtems_test_parallel_context *base,
>+ void *arg,
>+ size_t active_workers,
>+ size_t worker_index
>+)
>+{
>+ test_context *ctx = (test_context *) base;
>+ rtems_id id = ctx->sema[worker_index];
>+ uint32_t counter = 0;
>+
>+ while (!rtems_test_parallel_stop_job(&ctx->base)) {
>+ rtems_status_code sc;
>+
>+ ++counter;
>+
>+ sc = rtems_semaphore_obtain(id, RTEMS_WAIT, RTEMS_NO_TIMEOUT);
>+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
>+
>+ sc = rtems_semaphore_release(id);
>+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
>+ }
>+
>+ ctx->many_mutex_ops[active_workers - 1][worker_index] = counter;
>+}
>+
>+static void test_many_mutex_fini(
>+ rtems_test_parallel_context *base,
>+ void *arg,
>+ size_t active_workers
>+)
>+{
>+ test_context *ctx = (test_context *) base;
>+
>+ test_fini(
>+ "ManyMutex",
>+ &ctx->many_mutex_ops[active_workers - 1][0],
>+ active_workers
>+ );
>+}
>+
>+static void test_self_msg_body(
>+ rtems_test_parallel_context *base,
>+ void *arg,
>+ size_t active_workers,
>+ size_t worker_index
>+)
>+{
>+ test_context *ctx = (test_context *) base;
>+ rtems_id id = ctx->mq[worker_index];
>+ uint32_t counter = 0;
>+
>+ while (!rtems_test_parallel_stop_job(&ctx->base)) {
>+ rtems_status_code sc;
>+ test_msg msg = { .value = 0 };
>+ size_t n;
>+
>+ ++counter;
>+
>+ sc = rtems_message_queue_send(id, &msg, sizeof(msg));
>+ rtems_test_assert(sc == RTEMS_SUCCESSFUL || sc == RTEMS_TOO_MANY);
>+
>+ n = sizeof(msg);
>+ sc = rtems_message_queue_receive(
>+ id,
>+ &msg,
>+ &n,
>+ RTEMS_WAIT,
>+ RTEMS_NO_TIMEOUT
>+ );
>+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
>+ rtems_test_assert(n == sizeof(msg));
>+ }
>+
>+ ctx->self_msg_ops[active_workers - 1][worker_index] = counter;
>+}
>+
>+static void test_self_msg_fini(
>+ rtems_test_parallel_context *base,
>+ void *arg,
>+ size_t active_workers
>+)
>+{
>+ test_context *ctx = (test_context *) base;
>+
>+ test_fini(
>+ "SelfMsg",
>+ &ctx->self_msg_ops[active_workers - 1][0],
>+ active_workers
>+ );
>+}
>+
>+static void test_many_to_one_msg_body(
>+ rtems_test_parallel_context *base,
>+ void *arg,
>+ size_t active_workers,
>+ size_t worker_index
>+)
>+{
>+ test_context *ctx = (test_context *) base;
>+ rtems_id id = ctx->mq[0];
>+ bool is_master = rtems_test_parallel_is_master_worker(worker_index);
>+ uint32_t counter = 0;
>+
>+ while (!rtems_test_parallel_stop_job(&ctx->base)) {
>+ rtems_status_code sc;
>+ test_msg msg = { .value = 0 };
>+ size_t n;
>+
>+ ++counter;
>+
>+ sc = rtems_message_queue_send(id, &msg, sizeof(msg));
>+ rtems_test_assert(sc == RTEMS_SUCCESSFUL || sc == RTEMS_TOO_MANY);
>+
>+ if (is_master) {
>+ n = sizeof(msg);
>+ sc = rtems_message_queue_receive(
>+ id,
>+ &msg,
>+ &n,
>+ RTEMS_WAIT,
>+ RTEMS_NO_TIMEOUT
>+ );
>+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
>+ rtems_test_assert(n == sizeof(msg));
>+ }
>+ }
>+
>+ ctx->many_to_one_msg_ops[active_workers - 1][worker_index] =
>counter;
>+}
>+
>+static void test_many_to_one_msg_fini(
>+ rtems_test_parallel_context *base,
>+ void *arg,
>+ size_t active_workers
>+)
>+{
>+ test_context *ctx = (test_context *) base;
>+
>+ test_fini(
>+ "ManyToOneMsg",
>+ &ctx->many_to_one_msg_ops[active_workers - 1][0],
>+ active_workers
>+ );
>+}
>+
>+static const rtems_test_parallel_job test_jobs[] = {
>+ {
>+ .init = test_init,
>+ .body = test_self_event_body,
>+ .fini = test_self_event_fini,
>+ .cascade = true
>+ }, {
>+ .init = test_init,
>+ .body = test_all_to_one_event_body,
>+ .fini = test_all_to_one_event_fini,
>+ .cascade = true
>+ }, {
>+ .init = test_init,
>+ .body = test_one_mutex_body,
>+ .fini = test_one_mutex_fini,
>+ .cascade = true
>+ }, {
>+ .init = test_init,
>+ .body = test_many_mutex_body,
>+ .fini = test_many_mutex_fini,
>+ .cascade = true
>+ }, {
>+ .init = test_init,
>+ .body = test_self_msg_body,
>+ .fini = test_self_msg_fini,
>+ .cascade = true
>+ }, {
>+ .init = test_init,
>+ .body = test_many_to_one_msg_body,
>+ .fini = test_many_to_one_msg_fini,
>+ .cascade = true
>+ }
>+};
>+
>+static void Init(rtems_task_argument arg)
>+{
>+ test_context *ctx = &test_instance;
>+ const char *test = "TestTimeFine01";
>+ size_t i;
>+
>+ TEST_BEGIN();
>+
>+ ctx->master = rtems_task_self();
>+
>+ for (i = 0; i < CPU_COUNT; ++i) {
>+ rtems_status_code sc;
>+
>+ sc = rtems_semaphore_create(
>+ rtems_build_name('T', 'E', 'S', 'T'),
>+ 1,
>+ RTEMS_BINARY_SEMAPHORE | RTEMS_INHERIT_PRIORITY |
>RTEMS_PRIORITY,
>+ 0,
>+ &ctx->sema[i]
>+ );
>+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
>+
>+ sc = rtems_message_queue_create(
>+ rtems_build_name('T', 'E', 'S', 'T'),
>+ MSG_COUNT,
>+ sizeof(test_msg),
>+ RTEMS_DEFAULT_ATTRIBUTES,
>+ &ctx->mq[i]
>+ );
>+ rtems_test_assert(sc == RTEMS_SUCCESSFUL);
>+ }
>+
>+ printf("<%s>\n", test);
>+
>+ rtems_test_parallel(
>+ &ctx->base,
>+ 1,
>+ &test_jobs[0],
>+ RTEMS_ARRAY_SIZE(test_jobs)
>+ );
>+
>+ printf("</%s>\n", test);
>+
>+ TEST_END();
>+ rtems_test_exit(0);
>+}
>+
>+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
>+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
>+
>+#define CONFIGURE_USE_IMFS_AS_BASE_FILESYSTEM
>+
>+#define CONFIGURE_MAXIMUM_TASKS CPU_COUNT
>+
>+#define CONFIGURE_MAXIMUM_TIMERS 1
>+
>+#define CONFIGURE_MAXIMUM_SEMAPHORES CPU_COUNT
>+
>+#define CONFIGURE_MAXIMUM_MESSAGE_QUEUES CPU_COUNT
>+
>+#define CONFIGURE_MESSAGE_BUFFER_MEMORY \
>+ CONFIGURE_MESSAGE_BUFFERS_FOR_QUEUE(MSG_COUNT, sizeof(test_msg))
>+
>+#define CONFIGURE_INITIAL_EXTENSIONS RTEMS_TEST_INITIAL_EXTENSION
>+
>+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
>+
>+#define CONFIGURE_SMP_APPLICATION
>+
>+#define CONFIGURE_SMP_MAXIMUM_PROCESSORS CPU_COUNT
>+
>+#define CONFIGURE_INIT
>+
>+#include <rtems/confdefs.h>
>diff --git a/testsuites/tmtests/tmfine01/tmfine01.doc
>b/testsuites/tmtests/tmfine01/tmfine01.doc
>new file mode 100644
>index 0000000..1bf39c6
>--- /dev/null
>+++ b/testsuites/tmtests/tmfine01/tmfine01.doc
>@@ -0,0 +1,21 @@
>+This file describes the directives and concepts tested by this test
>set.
>+
>+test set name: tmfine01
>+
>+directives:
>+
>+ - rtems_event_send()
>+ - rtems_event_receive()
>+ - rtems_semaphore_obtain()
>+ - rtems_semaphore_release()
>+ - rtems_message_queue_send()
>+ - rtems_message_queue_receive()
>+
>+concepts:
>+
>+ - Count event send and receive operations to self.
>+ - Count event send and receive operations from all tasks to one.
>+ - Count mutex obtain and release operations with a private mutex.
>+ - Count mutex obtain and release operations with a global mutex.
>+ - Count message send and receive operations with a private message
>queue.
>+ - Count message send and receive operations with a global message
>queue.
>diff --git a/testsuites/tmtests/tmfine01/tmfine01.scn
>b/testsuites/tmtests/tmfine01/tmfine01.scn
>new file mode 100644
>index 0000000..5b7ddba
>--- /dev/null
>+++ b/testsuites/tmtests/tmfine01/tmfine01.scn
>@@ -0,0 +1,2092 @@
>+*** BEGIN OF TEST TMFINE 1 ***
>+<TestTimeFine01>
>+ <SelfEvent activeWorker="1">
>+ <Counter worker="0">2439242</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="2">
>+ <Counter worker="0">2434919</Counter>
>+ <Counter worker="1">2428545</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="3">
>+ <Counter worker="0">2450125</Counter>
>+ <Counter worker="1">2397577</Counter>
>+ <Counter worker="2">3396553</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="4">
>+ <Counter worker="0">2440893</Counter>
>+ <Counter worker="1">2377334</Counter>
>+ <Counter worker="2">3356199</Counter>
>+ <Counter worker="3">2412298</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="5">
>+ <Counter worker="0">2431918</Counter>
>+ <Counter worker="1">2361036</Counter>
>+ <Counter worker="2">3307873</Counter>
>+ <Counter worker="3">2361111</Counter>
>+ <Counter worker="4">3308071</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="6">
>+ <Counter worker="0">2447343</Counter>
>+ <Counter worker="1">2358781</Counter>
>+ <Counter worker="2">3312263</Counter>
>+ <Counter worker="3">2364497</Counter>
>+ <Counter worker="4">3323441</Counter>
>+ <Counter worker="5">2393829</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="7">
>+ <Counter worker="0">2438184</Counter>
>+ <Counter worker="1">2341618</Counter>
>+ <Counter worker="2">3284048</Counter>
>+ <Counter worker="3">2344390</Counter>
>+ <Counter worker="4">3289008</Counter>
>+ <Counter worker="5">2341336</Counter>
>+ <Counter worker="6">3287729</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="8">
>+ <Counter worker="0">2429033</Counter>
>+ <Counter worker="1">2317275</Counter>
>+ <Counter worker="2">3250911</Counter>
>+ <Counter worker="3">2322296</Counter>
>+ <Counter worker="4">3258434</Counter>
>+ <Counter worker="5">2316913</Counter>
>+ <Counter worker="6">3256091</Counter>
>+ <Counter worker="7">2345590</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="9">
>+ <Counter worker="0">2444659</Counter>
>+ <Counter worker="1">2316064</Counter>
>+ <Counter worker="2">3249718</Counter>
>+ <Counter worker="3">2321055</Counter>
>+ <Counter worker="4">3255668</Counter>
>+ <Counter worker="5">2314191</Counter>
>+ <Counter worker="6">3253259</Counter>
>+ <Counter worker="7">2294458</Counter>
>+ <Counter worker="8">3261977</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="10">
>+ <Counter worker="0">2435503</Counter>
>+ <Counter worker="1">2307485</Counter>
>+ <Counter worker="2">3237568</Counter>
>+ <Counter worker="3">2312408</Counter>
>+ <Counter worker="4">3243512</Counter>
>+ <Counter worker="5">2305652</Counter>
>+ <Counter worker="6">3241019</Counter>
>+ <Counter worker="7">2286440</Counter>
>+ <Counter worker="8">3248786</Counter>
>+ <Counter worker="9">3458482</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="11">
>+ <Counter worker="0">2450590</Counter>
>+ <Counter worker="1">2321791</Counter>
>+ <Counter worker="2">3257786</Counter>
>+ <Counter worker="3">2326880</Counter>
>+ <Counter worker="4">3263812</Counter>
>+ <Counter worker="5">2320008</Counter>
>+ <Counter worker="6">3261324</Counter>
>+ <Counter worker="7">2300522</Counter>
>+ <Counter worker="8">3269161</Counter>
>+ <Counter worker="9">3359031</Counter>
>+ <Counter worker="10">2399300</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="12">
>+ <Counter worker="0">2441277</Counter>
>+ <Counter worker="1">2312997</Counter>
>+ <Counter worker="2">3245449</Counter>
>+ <Counter worker="3">2318044</Counter>
>+ <Counter worker="4">3251478</Counter>
>+ <Counter worker="5">2311239</Counter>
>+ <Counter worker="6">3248935</Counter>
>+ <Counter worker="7">2291697</Counter>
>+ <Counter worker="8">3256744</Counter>
>+ <Counter worker="9">3356755</Counter>
>+ <Counter worker="10">2376798</Counter>
>+ <Counter worker="11">2410036</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="13">
>+ <Counter worker="0">2432106</Counter>
>+ <Counter worker="1">2304202</Counter>
>+ <Counter worker="2">3233069</Counter>
>+ <Counter worker="3">2309208</Counter>
>+ <Counter worker="4">3239016</Counter>
>+ <Counter worker="5">2302445</Counter>
>+ <Counter worker="6">3236547</Counter>
>+ <Counter worker="7">2283302</Counter>
>+ <Counter worker="8">3244262</Counter>
>+ <Counter worker="9">3315548</Counter>
>+ <Counter worker="10">2361237</Counter>
>+ <Counter worker="11">2361293</Counter>
>+ <Counter worker="12">3315613</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="14">
>+ <Counter worker="0">2447142</Counter>
>+ <Counter worker="1">2318609</Counter>
>+ <Counter worker="2">3253297</Counter>
>+ <Counter worker="3">2323619</Counter>
>+ <Counter worker="4">3259235</Counter>
>+ <Counter worker="5">2316796</Counter>
>+ <Counter worker="6">3256791</Counter>
>+ <Counter worker="7">2297409</Counter>
>+ <Counter worker="8">3264655</Counter>
>+ <Counter worker="9">3321434</Counter>
>+ <Counter worker="10">2357135</Counter>
>+ <Counter worker="11">2365225</Counter>
>+ <Counter worker="12">3328122</Counter>
>+ <Counter worker="13">2394746</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="15">
>+ <Counter worker="0">2437900</Counter>
>+ <Counter worker="1">2309745</Counter>
>+ <Counter worker="2">3240816</Counter>
>+ <Counter worker="3">2314700</Counter>
>+ <Counter worker="4">3246815</Counter>
>+ <Counter worker="5">2307939</Counter>
>+ <Counter worker="6">3244335</Counter>
>+ <Counter worker="7">2288528</Counter>
>+ <Counter worker="8">3252163</Counter>
>+ <Counter worker="9">3289024</Counter>
>+ <Counter worker="10">2340349</Counter>
>+ <Counter worker="11">2344734</Counter>
>+ <Counter worker="12">3292260</Counter>
>+ <Counter worker="13">2342291</Counter>
>+ <Counter worker="14">3289734</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="16">
>+ <Counter worker="0">2452934</Counter>
>+ <Counter worker="1">2324127</Counter>
>+ <Counter worker="2">3261061</Counter>
>+ <Counter worker="3">2329185</Counter>
>+ <Counter worker="4">3267123</Counter>
>+ <Counter worker="5">2322273</Counter>
>+ <Counter worker="6">3264567</Counter>
>+ <Counter worker="7">2302818</Counter>
>+ <Counter worker="8">3272466</Counter>
>+ <Counter worker="9">3292144</Counter>
>+ <Counter worker="10">2339664</Counter>
>+ <Counter worker="11">2347345</Counter>
>+ <Counter worker="12">3296732</Counter>
>+ <Counter worker="13">2343270</Counter>
>+ <Counter worker="14">3291900</Counter>
>+ <Counter worker="15">2369297</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="17">
>+ <Counter worker="0">2443837</Counter>
>+ <Counter worker="1">2315316</Counter>
>+ <Counter worker="2">3248712</Counter>
>+ <Counter worker="3">2320304</Counter>
>+ <Counter worker="4">3254608</Counter>
>+ <Counter worker="5">2313449</Counter>
>+ <Counter worker="6">3252138</Counter>
>+ <Counter worker="7">2294058</Counter>
>+ <Counter worker="8">3259930</Counter>
>+ <Counter worker="9">3257466</Counter>
>+ <Counter worker="10">2313585</Counter>
>+ <Counter worker="11">2323428</Counter>
>+ <Counter worker="12">3262292</Counter>
>+ <Counter worker="13">2318016</Counter>
>+ <Counter worker="14">3256271</Counter>
>+ <Counter worker="15">2294261</Counter>
>+ <Counter worker="16">3263853</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="18">
>+ <Counter worker="0">2409157</Counter>
>+ <Counter worker="1">2306402</Counter>
>+ <Counter worker="2">3236233</Counter>
>+ <Counter worker="3">2311467</Counter>
>+ <Counter worker="4">3242224</Counter>
>+ <Counter worker="5">2304599</Counter>
>+ <Counter worker="6">3239755</Counter>
>+ <Counter worker="7">2285337</Counter>
>+ <Counter worker="8">3247547</Counter>
>+ <Counter worker="9">3245036</Counter>
>+ <Counter worker="10">2304780</Counter>
>+ <Counter worker="11">2314538</Counter>
>+ <Counter worker="12">3249851</Counter>
>+ <Counter worker="13">2309182</Counter>
>+ <Counter worker="14">3243840</Counter>
>+ <Counter worker="15">2285742</Counter>
>+ <Counter worker="16">3250366</Counter>
>+ <Counter worker="17">3418604</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="19">
>+ <Counter worker="0">2416041</Counter>
>+ <Counter worker="1">2320825</Counter>
>+ <Counter worker="2">3256450</Counter>
>+ <Counter worker="3">2325923</Counter>
>+ <Counter worker="4">3262472</Counter>
>+ <Counter worker="5">2319042</Counter>
>+ <Counter worker="6">3259985</Counter>
>+ <Counter worker="7">2299561</Counter>
>+ <Counter worker="8">3267789</Counter>
>+ <Counter worker="9">3265334</Counter>
>+ <Counter worker="10">2319171</Counter>
>+ <Counter worker="11">2329005</Counter>
>+ <Counter worker="12">3270136</Counter>
>+ <Counter worker="13">2323666</Counter>
>+ <Counter worker="14">3264217</Counter>
>+ <Counter worker="15">2300027</Counter>
>+ <Counter worker="16">3270762</Counter>
>+ <Counter worker="17">3357941</Counter>
>+ <Counter worker="18">2387118</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="20">
>+ <Counter worker="0">2397524</Counter>
>+ <Counter worker="1">2312138</Counter>
>+ <Counter worker="2">3244108</Counter>
>+ <Counter worker="3">2317105</Counter>
>+ <Counter worker="4">3250112</Counter>
>+ <Counter worker="5">2310293</Counter>
>+ <Counter worker="6">3247627</Counter>
>+ <Counter worker="7">2290992</Counter>
>+ <Counter worker="8">3255397</Counter>
>+ <Counter worker="9">3252906</Counter>
>+ <Counter worker="10">2310305</Counter>
>+ <Counter worker="11">2320096</Counter>
>+ <Counter worker="12">3257660</Counter>
>+ <Counter worker="13">2314735</Counter>
>+ <Counter worker="14">3251716</Counter>
>+ <Counter worker="15">2291237</Counter>
>+ <Counter worker="16">3258287</Counter>
>+ <Counter worker="17">3313158</Counter>
>+ <Counter worker="18">2359786</Counter>
>+ <Counter worker="19">3389669</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="21">
>+ <Counter worker="0">2382159</Counter>
>+ <Counter worker="1">2303120</Counter>
>+ <Counter worker="2">3231640</Counter>
>+ <Counter worker="3">2308207</Counter>
>+ <Counter worker="4">3237659</Counter>
>+ <Counter worker="5">2301352</Counter>
>+ <Counter worker="6">3235144</Counter>
>+ <Counter worker="7">2282053</Counter>
>+ <Counter worker="8">3243009</Counter>
>+ <Counter worker="9">3240435</Counter>
>+ <Counter worker="10">2301457</Counter>
>+ <Counter worker="11">2311253</Counter>
>+ <Counter worker="12">3245235</Counter>
>+ <Counter worker="13">2305890</Counter>
>+ <Counter worker="14">3239180</Counter>
>+ <Counter worker="15">2282503</Counter>
>+ <Counter worker="16">3245865</Counter>
>+ <Counter worker="17">3290485</Counter>
>+ <Counter worker="18">2344582</Counter>
>+ <Counter worker="19">3306875</Counter>
>+ <Counter worker="20">2351956</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="22">
>+ <Counter worker="0">2386032</Counter>
>+ <Counter worker="1">2317614</Counter>
>+ <Counter worker="2">3251822</Counter>
>+ <Counter worker="3">2322596</Counter>
>+ <Counter worker="4">3257901</Counter>
>+ <Counter worker="5">2315748</Counter>
>+ <Counter worker="6">3255336</Counter>
>+ <Counter worker="7">2296302</Counter>
>+ <Counter worker="8">3263171</Counter>
>+ <Counter worker="9">3260758</Counter>
>+ <Counter worker="10">2315888</Counter>
>+ <Counter worker="11">2325681</Counter>
>+ <Counter worker="12">3265516</Counter>
>+ <Counter worker="13">2320325</Counter>
>+ <Counter worker="14">3259551</Counter>
>+ <Counter worker="15">2296755</Counter>
>+ <Counter worker="16">3266120</Counter>
>+ <Counter worker="17">3295460</Counter>
>+ <Counter worker="18">2348363</Counter>
>+ <Counter worker="19">3310445</Counter>
>+ <Counter worker="20">2357213</Counter>
>+ <Counter worker="21">2385562</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="23">
>+ <Counter worker="0">2373352</Counter>
>+ <Counter worker="1">2308745</Counter>
>+ <Counter worker="2">3239474</Counter>
>+ <Counter worker="3">2313746</Counter>
>+ <Counter worker="4">3245461</Counter>
>+ <Counter worker="5">2306904</Counter>
>+ <Counter worker="6">3242982</Counter>
>+ <Counter worker="7">2287602</Counter>
>+ <Counter worker="8">3250752</Counter>
>+ <Counter worker="9">3248257</Counter>
>+ <Counter worker="10">2307030</Counter>
>+ <Counter worker="11">2316845</Counter>
>+ <Counter worker="12">3253073</Counter>
>+ <Counter worker="13">2311491</Counter>
>+ <Counter worker="14">3247144</Counter>
>+ <Counter worker="15">2288045</Counter>
>+ <Counter worker="16">3253659</Counter>
>+ <Counter worker="17">3263347</Counter>
>+ <Counter worker="18">2325333</Counter>
>+ <Counter worker="19">3275731</Counter>
>+ <Counter worker="20">2333369</Counter>
>+ <Counter worker="21">2326288</Counter>
>+ <Counter worker="22">3272382</Counter>
>+ </SelfEvent>
>+ <SelfEvent activeWorker="24">
>+ <Counter worker="0">2323859</Counter>
>+ <Counter worker="1">2323201</Counter>
>+ <Counter worker="2">3259747</Counter>
>+ <Counter worker="3">2328242</Counter>
>+ <Counter worker="4">3265771</Counter>
>+ <Counter worker="5">2321389</Counter>
>+ <Counter worker="6">3263306</Counter>
>+ <Counter worker="7">2301985</Counter>
>+ <Counter worker="8">3271074</Counter>
>+ <Counter worker="9">3268539</Counter>
>+ <Counter worker="10">2321391</Counter>
>+ <Counter worker="11">2331282</Counter>
>+ <Counter worker="12">3273360</Counter>
>+ <Counter worker="13">2325840</Counter>
>+ <Counter worker="14">3267364</Counter>
>+ <Counter worker="15">2302301</Counter>
>+ <Counter worker="16">3273913</Counter>
>+ <Counter worker="17">3261834</Counter>
>+ <Counter worker="18">2324542</Counter>
>+ <Counter worker="19">3272797</Counter>
>+ <Counter worker="20">2333061</Counter>
>+ <Counter worker="21">2325351</Counter>
>+ <Counter worker="22">3268567</Counter>
>+ <Counter worker="23">3251123</Counter>
>+ </SelfEvent>
>+ <AllToOneEvent activeWorker="1">
>+ <Counter worker="0">2454533</Counter>
>+ </AllToOneEvent>
>+ <AllToOneEvent activeWorker="2">
>+ <Counter worker="0">2444811</Counter>
>+ <Counter worker="1">4552873</Counter>
>+ </AllToOneEvent>
>+ <AllToOneEvent activeWorker="3">
>+ <Counter worker="0">2460307</Counter>
>+ <Counter worker="1">4507332</Counter>
>+ <Counter worker="2">6760988</Counter>
>+ </AllToOneEvent>
>+ <AllToOneEvent activeWorker="4">
>+ <Counter worker="0">2451147</Counter>
>+ <Counter worker="1">4433793</Counter>
>+ <Counter worker="2">6650657</Counter>
>+ <Counter worker="3">4545259</Counter>
>+ </AllToOneEvent>
>+ <AllToOneEvent activeWorker="5">
>+ <Counter worker="0">2441987</Counter>
>+ <Counter worker="1">4415771</Counter>
>+ <Counter worker="2">6623623</Counter>
>+ <Counter worker="3">4415780</Counter>
>+ <Counter worker="4">6623658</Counter>
>+ </AllToOneEvent>
>+ <AllToOneEvent activeWorker="6">
>+ <Counter worker="0">2457480</Counter>
>+ <Counter worker="1">4407822</Counter>
>+ <Counter worker="2">6601288</Counter>
>+ <Counter worker="3">4445059</Counter>
>+ <Counter worker="4">6621304</Counter>
>+ <Counter worker="5">4505768</Counter>
>+ </AllToOneEvent>
>+ <AllToOneEvent activeWorker="7">
>+ <Counter worker="0">2448321</Counter>
>+ <Counter worker="1">4384898</Counter>
>+ <Counter worker="2">6577307</Counter>
>+ <Counter worker="3">4384946</Counter>
>+ <Counter worker="4">6577337</Counter>
>+ <Counter worker="5">4384911</Counter>
>+ <Counter worker="6">6577325</Counter>
>+ </AllToOneEvent>
>+ <AllToOneEvent activeWorker="8">
>+ <Counter worker="0">2463815</Counter>
>+ <Counter worker="1">4384322</Counter>
>+ <Counter worker="2">6565540</Counter>
>+ <Counter worker="3">4418699</Counter>
>+ <Counter worker="4">6570694</Counter>
>+ <Counter worker="5">4396540</Counter>
>+ <Counter worker="6">6567240</Counter>
>+ <Counter worker="7">4514109</Counter>
>+ </AllToOneEvent>
>+ <AllToOneEvent activeWorker="9">
>+ <Counter worker="0">2454656</Counter>
>+ <Counte
--joel
More information about the devel
mailing list