diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-02-11 17:25:00 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2014-02-28 09:06:20 +0100 |
commit | 9abbb6ab97a5a42ae9c3d411b8bc26bf78b5a654 (patch) | |
tree | a2b83867928ddb6e453998ae0e22d01d070c7926 /testsuites/tmtests | |
parent | bsp/leon3: Add L2 cache support (diff) | |
download | rtems-9abbb6ab97a5a42ae9c3d411b8bc26bf78b5a654.tar.bz2 |
tmtests/tmcontext01: New test
Diffstat (limited to '')
-rw-r--r-- | testsuites/tmtests/Makefile.am | 1 | ||||
-rw-r--r-- | testsuites/tmtests/configure.ac | 1 | ||||
-rw-r--r-- | testsuites/tmtests/tmcontext01/Makefile.am | 19 | ||||
-rw-r--r-- | testsuites/tmtests/tmcontext01/init.c | 273 | ||||
-rw-r--r-- | testsuites/tmtests/tmcontext01/plot.py | 37 | ||||
-rw-r--r-- | testsuites/tmtests/tmcontext01/tmcontext01.doc | 12 | ||||
-rw-r--r-- | testsuites/tmtests/tmcontext01/tmcontext01.scn | 255 |
7 files changed, 598 insertions, 0 deletions
diff --git a/testsuites/tmtests/Makefile.am b/testsuites/tmtests/Makefile.am index 2e473653d4..6a5a75a6a2 100644 --- a/testsuites/tmtests/Makefile.am +++ b/testsuites/tmtests/Makefile.am @@ -3,6 +3,7 @@ ACLOCAL_AMFLAGS = -I ../aclocal 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 +SUBDIRS += tmcontext01 include $(top_srcdir)/../automake/subdirs.am include $(top_srcdir)/../automake/local.am diff --git a/testsuites/tmtests/configure.ac b/testsuites/tmtests/configure.ac index 7e1c267a3f..1e3241ffb3 100644 --- a/testsuites/tmtests/configure.ac +++ b/testsuites/tmtests/configure.ac @@ -28,6 +28,7 @@ AC_SUBST(OPERATION_COUNT) # Explicitly list all Makefiles here AC_CONFIG_FILES([Makefile +tmcontext01/Makefile tmck/Makefile tmoverhd/Makefile tm01/Makefile diff --git a/testsuites/tmtests/tmcontext01/Makefile.am b/testsuites/tmtests/tmcontext01/Makefile.am new file mode 100644 index 0000000000..6612272dc9 --- /dev/null +++ b/testsuites/tmtests/tmcontext01/Makefile.am @@ -0,0 +1,19 @@ +rtems_tests_PROGRAMS = tmcontext01 +tmcontext01_SOURCES = init.c + +dist_rtems_tests_DATA = tmcontext01.scn tmcontext01.doc + +include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg +include $(top_srcdir)/../automake/compile.am +include $(top_srcdir)/../automake/leaf.am + +AM_CPPFLAGS += -I$(top_srcdir)/../support/include + +LINK_OBJS = $(tmcontext01_OBJECTS) +LINK_LIBS = $(tmcontext01_LDLIBS) + +tmcontext01$(EXEEXT): $(tmcontext01_OBJECTS) $(tmcontext01_DEPENDENCIES) + @rm -f tmcontext01$(EXEEXT) + $(make-exe) + +include $(top_srcdir)/../automake/local.am diff --git a/testsuites/tmtests/tmcontext01/init.c b/testsuites/tmtests/tmcontext01/init.c new file mode 100644 index 0000000000..ba3bcec02d --- /dev/null +++ b/testsuites/tmtests/tmcontext01/init.c @@ -0,0 +1,273 @@ +/* + * Copyright (c) 2014 embedded brains GmbH. All rights reserved. + * + * embedded brains GmbH + * Dornierstr. 4 + * 82178 Puchheim + * Germany + * <rtems@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.com/license/LICENSE. + */ + +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#include <rtems/counter.h> +#include <rtems.h> + +#include <stdio.h> +#include <stdlib.h> +#include <inttypes.h> +#include <alloca.h> + +#include "tmacros.h" + +#define FUNCTION_LEVELS 16 + +#define SAMPLES 123 + +#define CPU_COUNT 32 + +static rtems_counter_ticks t[SAMPLES]; + +static volatile bool always_true = true; + +static size_t data_size; + +static volatile int *main_data; + +static Context_Control ctx; + +static void dirty_data_cache(volatile int *d) +{ + size_t n = data_size / sizeof(*d); + size_t i; + + for (i = 0; i < n; ++i) { + d[i] = i; + } +} + +static int prevent_opt_func(int m, int n) +{ + if (m == 0) { + return n + 1; + } else if (m > 0 && n == 0) { + return prevent_opt_func(m - 1, 1); + } else { + return prevent_opt_func(m - 1, prevent_opt_func(m, n - 1)); + } +} + +static int call_at_level(int start, int fl, int s, bool dirty) +{ + if (fl == start) { + /* + * Some architectures like the SPARC have register windows. A side-effect + * of this context switch is that we start with a fresh window set. On + * architectures like ARM or PowerPC this context switch has no effect. + */ + _Context_Switch(&ctx, &ctx); + } + + if (fl > 0) { + if (always_true) { + return call_at_level(start, fl - 1, s, dirty); + } else { + return prevent_opt_func(fl - 1, fl - 2); + } + } else { + char *volatile space; + rtems_counter_ticks a; + rtems_counter_ticks b; + + if (dirty) { + dirty_data_cache(main_data); + rtems_cache_invalidate_entire_instruction(); + } + + a = rtems_counter_read(); + + /* Ensure that we use an untouched stack area */ + space = alloca(1024); + (void) space; + + _Context_Switch(&ctx, &ctx); + + b = rtems_counter_read(); + t[s] = rtems_counter_difference(b, a); + + return 0; + } +} + +static void load_task(rtems_task_argument arg) +{ + volatile int *load_data = (volatile int *) arg; + + while (true) { + dirty_data_cache(load_data); + } +} + +static int cmp(const void *ap, const void *bp) +{ + const rtems_counter_ticks *a = ap; + const rtems_counter_ticks *b = bp; + + return *a - *b; +} + +static void sort_t(void) +{ + qsort(&t[0], SAMPLES, sizeof(t[0]), cmp); +} + +static void test_by_function_level(int fl, bool dirty) +{ + rtems_interrupt_level level; + rtems_interrupt_lock lock = RTEMS_INTERRUPT_LOCK_INITIALIZER; + int s; + uint64_t min; + uint64_t q1; + uint64_t q2; + uint64_t q3; + uint64_t max; + + rtems_interrupt_lock_acquire(&lock, level); + + for (s = 0; s < SAMPLES; ++s) { + call_at_level(fl, fl, s, dirty); + } + + rtems_interrupt_lock_release(&lock, level); + + sort_t(); + + min = t[0]; + q1 = t[(1 * SAMPLES) / 4]; + q2 = t[SAMPLES / 2]; + q3 = t[(3 * SAMPLES) / 4]; + max = t[SAMPLES - 1]; + + printf( + " <Sample functionNestLevel=\"%i\">\n" + " <Min unit=\"ns\">%" PRIu64 "</Min>" + "<Q1 unit=\"ns\">%" PRIu64 "</Q1>" + "<Q2 unit=\"ns\">%" PRIu64 "</Q2>" + "<Q3 unit=\"ns\">%" PRIu64 "</Q3>" + "<Max unit=\"ns\">%" PRIu64 "</Max>\n" + " </Sample>\n", + fl, + rtems_counter_ticks_to_nanoseconds(min), + rtems_counter_ticks_to_nanoseconds(q1), + rtems_counter_ticks_to_nanoseconds(q2), + rtems_counter_ticks_to_nanoseconds(q3), + rtems_counter_ticks_to_nanoseconds(max) + ); +} + +static void test(bool dirty, uint32_t load) +{ + int fl; + + printf( + " <ContextSwitchTest environment=\"%s\"", + dirty ? "dirty" : "normal" + ); + + if (load > 0) { + printf(" load=\"%" PRIu32 "\"", load); + } + + printf(">\n"); + + for (fl = 0; fl < FUNCTION_LEVELS; ++fl) { + test_by_function_level(fl, dirty); + } + + printf(" </ContextSwitchTest>\n"); +} + +static void Init(rtems_task_argument arg) +{ + uint32_t load = 0; + + printf( + "\n" + "\n" + "<?xml version=\"1.0\"?>\n" + "<!-- *** TEST TMCONTEXT 1 *** -->\n" + "<Test>\n" + ); + + data_size = rtems_cache_get_data_cache_size(0); + if (data_size > 0) { + main_data = malloc(data_size); + rtems_test_assert(main_data != NULL); + } + + test(false, load); + test(true, load); + + for (load = 1; load < rtems_smp_get_processor_count(); ++load) { + rtems_status_code sc; + rtems_id id; + volatile int *load_data = NULL; + + if (data_size > 0) { + load_data = malloc(data_size); + if (load_data == NULL) { + load_data = main_data; + } + } + + sc = rtems_task_create( + rtems_build_name('L', 'O', 'A', 'D'), + 1, + RTEMS_MINIMUM_STACK_SIZE, + RTEMS_DEFAULT_MODES, + RTEMS_DEFAULT_ATTRIBUTES, + &id + ); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + sc = rtems_task_start(id, load_task, (rtems_task_argument) load_data); + rtems_test_assert(sc == RTEMS_SUCCESSFUL); + + test(true, load); + } + + printf( + "</Test>\n" + "<!-- *** END OF TEST TMCONTEXT 1 *** -->\n" + ); + + rtems_test_exit(0); +} + +/* + * Do not use a clock driver, since this will disturb the test in the "normal" + * environment. + */ +#define CONFIGURE_APPLICATION_DOES_NOT_NEED_CLOCK_DRIVER + +#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER + +#define CONFIGURE_MAXIMUM_TASKS (1 + CPU_COUNT) + +#define CONFIGURE_INIT_TASK_STACK_SIZE (32 * 1024) + +#define CONFIGURE_SMP_APPLICATION + +#define CONFIGURE_SMP_MAXIMUM_PROCESSORS CPU_COUNT + +#define CONFIGURE_RTEMS_INIT_TASKS_TABLE + +#define CONFIGURE_INIT + +#include <rtems/confdefs.h> diff --git a/testsuites/tmtests/tmcontext01/plot.py b/testsuites/tmtests/tmcontext01/plot.py new file mode 100644 index 0000000000..897c8e2b3c --- /dev/null +++ b/testsuites/tmtests/tmcontext01/plot.py @@ -0,0 +1,37 @@ +# +# Copyright (c) 2014 embedded brains GmbH. All rights reserved. +# +# The license and distribution terms for this file may be +# found in the file LICENSE in this distribution or at +# http://www.rtems.com/license/LICENSE. +# + +import libxml2 +from libxml2 import xmlNode +import matplotlib.pyplot as plt +doc = libxml2.parseFile("tmcontext01.scn") +ctx = doc.xpathNewContext() + +def plot(y): + n=len(y) + x=range(0, n) + plt.plot(x, y) + +plt.title("context switch timing test") +plt.xlabel('function nest level') +plt.ylabel('context switch time [ns]') + +for e in ["normal", "dirty"]: + for i in ["Min", "Q1", "Q2", "Q3", "Max"]: + y=map(xmlNode.getContent, ctx.xpathEval("/Test/ContextSwitchTest[@environment='" + e + "' and not(@load)]/Sample/" + i)) + plot(y) +load=1 +while load > 0: + for i in ["Min", "Q1", "Q2", "Q3", "Max"]: + y=map(xmlNode.getContent, ctx.xpathEval("/Test/ContextSwitchTest[@environment='dirty' and @load='" + str(load) + "']/Sample/" + i)) + if len(y) > 0: + plot(y) + load = load + 1 + else: + load = 0 +plt.show() diff --git a/testsuites/tmtests/tmcontext01/tmcontext01.doc b/testsuites/tmtests/tmcontext01/tmcontext01.doc new file mode 100644 index 0000000000..a1b739b6ab --- /dev/null +++ b/testsuites/tmtests/tmcontext01/tmcontext01.doc @@ -0,0 +1,12 @@ +This file describes the directives and concepts tested by this test set. + +test set name: tmcontext01 + +directives: + + - _CPU_Context_switch() + +concepts: + + - Measure the context switch times depending on function nest level and cache + state. diff --git a/testsuites/tmtests/tmcontext01/tmcontext01.scn b/testsuites/tmtests/tmcontext01/tmcontext01.scn new file mode 100644 index 0000000000..9044619319 --- /dev/null +++ b/testsuites/tmtests/tmcontext01/tmcontext01.scn @@ -0,0 +1,255 @@ +<?xml version="1.0"?> +<!-- *** TEST TMCONTEXT 1 *** --> +<Test> + <ContextSwitchTest environment="normal"> + <Sample functionNestLevel="0"> + <Min unit="ns">2440</Min><Q1 unit="ns">2440</Q1><Q2 unit="ns">2480</Q2><Q3 unit="ns">2480</Q3><Max unit="ns">2800</Max> + </Sample> + <Sample functionNestLevel="1"> + <Min unit="ns">3520</Min><Q1 unit="ns">3760</Q1><Q2 unit="ns">3800</Q2><Q3 unit="ns">3800</Q3><Max unit="ns">4120</Max> + </Sample> + <Sample functionNestLevel="2"> + <Min unit="ns">4280</Min><Q1 unit="ns">4720</Q1><Q2 unit="ns">4720</Q2><Q3 unit="ns">5040</Q3><Max unit="ns">5080</Max> + </Sample> + <Sample functionNestLevel="3"> + <Min unit="ns">5320</Min><Q1 unit="ns">5640</Q1><Q2 unit="ns">5680</Q2><Q3 unit="ns">5960</Q3><Max unit="ns">6000</Max> + </Sample> + <Sample functionNestLevel="4"> + <Min unit="ns">6360</Min><Q1 unit="ns">6600</Q1><Q2 unit="ns">6600</Q2><Q3 unit="ns">6920</Q3><Max unit="ns">6920</Max> + </Sample> + <Sample functionNestLevel="5"> + <Min unit="ns">7480</Min><Q1 unit="ns">7520</Q1><Q2 unit="ns">7840</Q2><Q3 unit="ns">7840</Q3><Max unit="ns">7880</Max> + </Sample> + <Sample functionNestLevel="6"> + <Min unit="ns">8480</Min><Q1 unit="ns">8480</Q1><Q2 unit="ns">8800</Q2><Q3 unit="ns">8800</Q3><Max unit="ns">8840</Max> + </Sample> + <Sample functionNestLevel="7"> + <Min unit="ns">8840</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9280</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9320</Max> + </Sample> + <Sample functionNestLevel="8"> + <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9280</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9320</Max> + </Sample> + <Sample functionNestLevel="9"> + <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">8960</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max> + </Sample> + <Sample functionNestLevel="10"> + <Min unit="ns">8800</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max> + </Sample> + <Sample functionNestLevel="11"> + <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9280</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max> + </Sample> + <Sample functionNestLevel="12"> + <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9320</Max> + </Sample> + <Sample functionNestLevel="13"> + <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max> + </Sample> + <Sample functionNestLevel="14"> + <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">9240</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max> + </Sample> + <Sample functionNestLevel="15"> + <Min unit="ns">8920</Min><Q1 unit="ns">8960</Q1><Q2 unit="ns">8960</Q2><Q3 unit="ns">9280</Q3><Max unit="ns">9280</Max> + </Sample> + </ContextSwitchTest> + <ContextSwitchTest environment="dirty"> + <Sample functionNestLevel="0"> + <Min unit="ns">9720</Min><Q1 unit="ns">10560</Q1><Q2 unit="ns">10600</Q2><Q3 unit="ns">10680</Q3><Max unit="ns">11160</Max> + </Sample> + <Sample functionNestLevel="1"> + <Min unit="ns">11840</Min><Q1 unit="ns">12280</Q1><Q2 unit="ns">12560</Q2><Q3 unit="ns">12600</Q3><Max unit="ns">12640</Max> + </Sample> + <Sample functionNestLevel="2"> + <Min unit="ns">12880</Min><Q1 unit="ns">13560</Q1><Q2 unit="ns">13600</Q2><Q3 unit="ns">13640</Q3><Max unit="ns">13680</Max> + </Sample> + <Sample functionNestLevel="3"> + <Min unit="ns">13960</Min><Q1 unit="ns">14640</Q1><Q2 unit="ns">14680</Q2><Q3 unit="ns">14720</Q3><Max unit="ns">14720</Max> + </Sample> + <Sample functionNestLevel="4"> + <Min unit="ns">15000</Min><Q1 unit="ns">15680</Q1><Q2 unit="ns">15760</Q2><Q3 unit="ns">15760</Q3><Max unit="ns">15800</Max> + </Sample> + <Sample functionNestLevel="5"> + <Min unit="ns">16320</Min><Q1 unit="ns">16720</Q1><Q2 unit="ns">16800</Q2><Q3 unit="ns">16800</Q3><Max unit="ns">17040</Max> + </Sample> + <Sample functionNestLevel="6"> + <Min unit="ns">17320</Min><Q1 unit="ns">17560</Q1><Q2 unit="ns">17800</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max> + </Sample> + <Sample functionNestLevel="7"> + <Min unit="ns">17440</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max> + </Sample> + <Sample functionNestLevel="8"> + <Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max> + </Sample> + <Sample functionNestLevel="9"> + <Min unit="ns">17400</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18120</Max> + </Sample> + <Sample functionNestLevel="10"> + <Min unit="ns">17320</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max> + </Sample> + <Sample functionNestLevel="11"> + <Min unit="ns">17360</Min><Q1 unit="ns">17840</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max> + </Sample> + <Sample functionNestLevel="12"> + <Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18160</Max> + </Sample> + <Sample functionNestLevel="13"> + <Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max> + </Sample> + <Sample functionNestLevel="14"> + <Min unit="ns">17760</Min><Q1 unit="ns">17840</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max> + </Sample> + <Sample functionNestLevel="15"> + <Min unit="ns">17360</Min><Q1 unit="ns">17800</Q1><Q2 unit="ns">17840</Q2><Q3 unit="ns">17880</Q3><Max unit="ns">18200</Max> + </Sample> + </ContextSwitchTest> + <ContextSwitchTest environment="dirty" load="1"> + <Sample functionNestLevel="0"> + <Min unit="ns">23800</Min><Q1 unit="ns">24440</Q1><Q2 unit="ns">24640</Q2><Q3 unit="ns">24720</Q3><Max unit="ns">25080</Max> + </Sample> + <Sample functionNestLevel="1"> + <Min unit="ns">28040</Min><Q1 unit="ns">28560</Q1><Q2 unit="ns">28640</Q2><Q3 unit="ns">28680</Q3><Max unit="ns">28720</Max> + </Sample> + <Sample functionNestLevel="2"> + <Min unit="ns">31600</Min><Q1 unit="ns">32160</Q1><Q2 unit="ns">32160</Q2><Q3 unit="ns">32200</Q3><Max unit="ns">32280</Max> + </Sample> + <Sample functionNestLevel="3"> + <Min unit="ns">35400</Min><Q1 unit="ns">35720</Q1><Q2 unit="ns">35760</Q2><Q3 unit="ns">35920</Q3><Max unit="ns">36080</Max> + </Sample> + <Sample functionNestLevel="4"> + <Min unit="ns">38960</Min><Q1 unit="ns">39280</Q1><Q2 unit="ns">39320</Q2><Q3 unit="ns">39560</Q3><Max unit="ns">39640</Max> + </Sample> + <Sample functionNestLevel="5"> + <Min unit="ns">42480</Min><Q1 unit="ns">42840</Q1><Q2 unit="ns">43080</Q2><Q3 unit="ns">43120</Q3><Max unit="ns">43200</Max> + </Sample> + <Sample functionNestLevel="6"> + <Min unit="ns">46120</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46880</Max> + </Sample> + <Sample functionNestLevel="7"> + <Min unit="ns">46080</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46760</Max> + </Sample> + <Sample functionNestLevel="8"> + <Min unit="ns">46320</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">47040</Max> + </Sample> + <Sample functionNestLevel="9"> + <Min unit="ns">46040</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46960</Max> + </Sample> + <Sample functionNestLevel="10"> + <Min unit="ns">45960</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46960</Max> + </Sample> + <Sample functionNestLevel="11"> + <Min unit="ns">46040</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46720</Max> + </Sample> + <Sample functionNestLevel="12"> + <Min unit="ns">46080</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46920</Max> + </Sample> + <Sample functionNestLevel="13"> + <Min unit="ns">46080</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46720</Max> + </Sample> + <Sample functionNestLevel="14"> + <Min unit="ns">46280</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">46760</Max> + </Sample> + <Sample functionNestLevel="15"> + <Min unit="ns">46360</Min><Q1 unit="ns">46600</Q1><Q2 unit="ns">46640</Q2><Q3 unit="ns">46680</Q3><Max unit="ns">47040</Max> + </Sample> + </ContextSwitchTest> + <ContextSwitchTest environment="dirty" load="2"> + <Sample functionNestLevel="0"> + <Min unit="ns">37560</Min><Q1 unit="ns">38200</Q1><Q2 unit="ns">38240</Q2><Q3 unit="ns">38480</Q3><Max unit="ns">38600</Max> + </Sample> + <Sample functionNestLevel="1"> + <Min unit="ns">44880</Min><Q1 unit="ns">45480</Q1><Q2 unit="ns">45560</Q2><Q3 unit="ns">45600</Q3><Max unit="ns">45640</Max> + </Sample> + <Sample functionNestLevel="2"> + <Min unit="ns">50920</Min><Q1 unit="ns">51560</Q1><Q2 unit="ns">51600</Q2><Q3 unit="ns">51800</Q3><Max unit="ns">51960</Max> + </Sample> + <Sample functionNestLevel="3"> + <Min unit="ns">57320</Min><Q1 unit="ns">57640</Q1><Q2 unit="ns">57880</Q2><Q3 unit="ns">57920</Q3><Max unit="ns">58240</Max> + </Sample> + <Sample functionNestLevel="4"> + <Min unit="ns">63320</Min><Q1 unit="ns">63920</Q1><Q2 unit="ns">63960</Q2><Q3 unit="ns">64000</Q3><Max unit="ns">64600</Max> + </Sample> + <Sample functionNestLevel="5"> + <Min unit="ns">69840</Min><Q1 unit="ns">69960</Q1><Q2 unit="ns">70040</Q2><Q3 unit="ns">70240</Q3><Max unit="ns">70400</Max> + </Sample> + <Sample functionNestLevel="6"> + <Min unit="ns">75600</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76880</Max> + </Sample> + <Sample functionNestLevel="7"> + <Min unit="ns">75440</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76840</Max> + </Sample> + <Sample functionNestLevel="8"> + <Min unit="ns">75640</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76960</Max> + </Sample> + <Sample functionNestLevel="9"> + <Min unit="ns">75640</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76440</Max> + </Sample> + <Sample functionNestLevel="10"> + <Min unit="ns">75920</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76400</Max> + </Sample> + <Sample functionNestLevel="11"> + <Min unit="ns">75600</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76920</Max> + </Sample> + <Sample functionNestLevel="12"> + <Min unit="ns">75360</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76440</Max> + </Sample> + <Sample functionNestLevel="13"> + <Min unit="ns">75360</Min><Q1 unit="ns">76200</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76960</Max> + </Sample> + <Sample functionNestLevel="14"> + <Min unit="ns">75640</Min><Q1 unit="ns">76160</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76960</Max> + </Sample> + <Sample functionNestLevel="15"> + <Min unit="ns">75960</Min><Q1 unit="ns">76240</Q1><Q2 unit="ns">76280</Q2><Q3 unit="ns">76320</Q3><Max unit="ns">76400</Max> + </Sample> + </ContextSwitchTest> + <ContextSwitchTest environment="dirty" load="3"> + <Sample functionNestLevel="0"> + <Min unit="ns">52400</Min><Q1 unit="ns">52480</Q1><Q2 unit="ns">52520</Q2><Q3 unit="ns">52800</Q3><Max unit="ns">53720</Max> + </Sample> + <Sample functionNestLevel="1"> + <Min unit="ns">61680</Min><Q1 unit="ns">62600</Q1><Q2 unit="ns">62640</Q2><Q3 unit="ns">62680</Q3><Max unit="ns">62800</Max> + </Sample> + <Sample functionNestLevel="2"> + <Min unit="ns">70160</Min><Q1 unit="ns">71160</Q1><Q2 unit="ns">71360</Q2><Q3 unit="ns">71480</Q3><Max unit="ns">72160</Max> + </Sample> + <Sample functionNestLevel="3"> + <Min unit="ns">79000</Min><Q1 unit="ns">79960</Q1><Q2 unit="ns">80000</Q2><Q3 unit="ns">80000</Q3><Max unit="ns">80920</Max> + </Sample> + <Sample functionNestLevel="4"> + <Min unit="ns">87600</Min><Q1 unit="ns">88480</Q1><Q2 unit="ns">88760</Q2><Q3 unit="ns">88800</Q3><Max unit="ns">88880</Max> + </Sample> + <Sample functionNestLevel="5"> + <Min unit="ns">96320</Min><Q1 unit="ns">97280</Q1><Q2 unit="ns">97320</Q2><Q3 unit="ns">97360</Q3><Max unit="ns">98600</Max> + </Sample> + <Sample functionNestLevel="6"> + <Min unit="ns">105160</Min><Q1 unit="ns">105840</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">107120</Max> + </Sample> + <Sample functionNestLevel="7"> + <Min unit="ns">105200</Min><Q1 unit="ns">106040</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">107080</Max> + </Sample> + <Sample functionNestLevel="8"> + <Min unit="ns">104880</Min><Q1 unit="ns">105920</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max> + </Sample> + <Sample functionNestLevel="9"> + <Min unit="ns">105760</Min><Q1 unit="ns">106000</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max> + </Sample> + <Sample functionNestLevel="10"> + <Min unit="ns">104880</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">107080</Max> + </Sample> + <Sample functionNestLevel="11"> + <Min unit="ns">105720</Min><Q1 unit="ns">105960</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106240</Max> + </Sample> + <Sample functionNestLevel="12"> + <Min unit="ns">104960</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max> + </Sample> + <Sample functionNestLevel="13"> + <Min unit="ns">104880</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max> + </Sample> + <Sample functionNestLevel="14"> + <Min unit="ns">105720</Min><Q1 unit="ns">105880</Q1><Q2 unit="ns">106080</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106240</Max> + </Sample> + <Sample functionNestLevel="15"> + <Min unit="ns">104920</Min><Q1 unit="ns">105840</Q1><Q2 unit="ns">106120</Q2><Q3 unit="ns">106160</Q3><Max unit="ns">106280</Max> + </Sample> + </ContextSwitchTest> +</Test> +<!-- *** END OF TEST TMCONTEXT 1 *** --> |