diff options
-rw-r--r-- | tests/test_baretrace.py | 2 | ||||
-rw-r--r-- | tests/test_caching.py | 7 | ||||
-rw-r--r-- | tests/test_common_clk.py | 50 | ||||
-rw-r--r-- | tests/test_filesystem.py | 57 | ||||
-rw-r--r-- | tests/test_ftrace.py | 36 | ||||
-rw-r--r-- | tests/test_systrace.py | 10 | ||||
-rw-r--r-- | tests/trace_common_clk.txt | 8 | ||||
-rw-r--r-- | tests/trace_filesystem.txt | 44 | ||||
-rw-r--r-- | trappy/bare_trace.py | 15 | ||||
-rw-r--r-- | trappy/common_clk.py | 58 | ||||
-rw-r--r-- | trappy/filesystem.py | 67 | ||||
-rw-r--r-- | trappy/ftrace.py | 2 | ||||
-rw-r--r-- | trappy/utils.py | 2 |
13 files changed, 344 insertions, 14 deletions
diff --git a/tests/test_baretrace.py b/tests/test_baretrace.py index 257754d..f1547c3 100644 --- a/tests/test_baretrace.py +++ b/tests/test_baretrace.py @@ -56,7 +56,7 @@ class TestBareTrace(unittest.TestCase): trace.add_parsed_event("pmu_counter", self.dfr[0]) trace.add_parsed_event("load_event", self.dfr[1]) - self.assertEquals(trace.get_duration(), self.dfr[1].index[-1]) + self.assertEquals(trace.get_duration(), self.dfr[1].index[-1] - self.dfr[0].index[0]) def test_bare_trace_get_duration_normalized(self): """BareTrace.get_duration() works if the trace has been normalized""" diff --git a/tests/test_caching.py b/tests/test_caching.py index 9fcd33a..881f9ba 100644 --- a/tests/test_caching.py +++ b/tests/test_caching.py @@ -200,14 +200,15 @@ class TestCaching(utils_tests.SetupDirectory): trace_dir = os.path.dirname(trace_path) trace_file = os.path.basename(trace_path) cache_dir = '.' + trace_file + '.cache' - self.assertEquals(len(os.listdir(cache_dir)), 22) + number_of_trace_categories = 29 + self.assertEquals(len(os.listdir(cache_dir)), number_of_trace_categories) os.remove(os.path.join(cache_dir, 'SchedWakeup.csv')) - self.assertEquals(len(os.listdir(cache_dir)), 21) + self.assertEquals(len(os.listdir(cache_dir)), number_of_trace_categories - 1) # Generate trace again, should regenerate only the missing item trace = trappy.FTrace() - self.assertEquals(len(os.listdir(cache_dir)), 22) + self.assertEquals(len(os.listdir(cache_dir)), number_of_trace_categories) for c in trace.trace_classes: if isinstance(c, trace.class_definitions['sched_wakeup']): self.assertEquals(c.cached, False) diff --git a/tests/test_common_clk.py b/tests/test_common_clk.py new file mode 100644 index 0000000..3d4cfca --- /dev/null +++ b/tests/test_common_clk.py @@ -0,0 +1,50 @@ +# Copyright 2017 ARM Limited, Google +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import os +import sys + +import utils_tests +import trappy + +sys.path.append(os.path.join(utils_tests.TESTS_DIRECTORY, "..", "trappy")) + +class TestCommonClk(utils_tests.SetupDirectory): + def __init__(self, *args, **kwargs): + super(TestCommonClk, self).__init__( + [("trace_common_clk.txt", "trace_common_clk.txt"),], + *args, + **kwargs) + + def test_common_clk_set_rate_can_be_parsed(self): + """TestCommonClk: test that clock__set_rate events can be parsed""" + trace = trappy.FTrace("trace_common_clk.txt", events=['clock_set_rate']) + df = trace.clock_set_rate.data_frame + self.assertSetEqual(set(df.columns), + set(["__comm", "__cpu", "__line", "__pid", "__tgid", "cpu_id", "clk_name", "rate"])) + + def test_common_clk_enable_can_be_parsed(self): + """TestCommonClk: test that clock_enable events can be parsed""" + trace = trappy.FTrace("trace_common_clk.txt", events=['clock_enable']) + df = trace.clock_enable.data_frame + self.assertSetEqual(set(df.columns), + set(["__comm", "__cpu", "__line", "__pid", "__tgid", "cpu_id", "clk_name", "state"])) + + def test_common_clk_disable_can_be_parsed(self): + """TestCommonClk: test that clock_disable events can be parsed""" + trace = trappy.FTrace("trace_common_clk.txt", events=['clock_disable']) + df = trace.clock_disable.data_frame + self.assertSetEqual(set(df.columns), + set(["__comm", "__cpu", "__line", "__pid", "__tgid", "cpu_id", "clk_name", "state"])) diff --git a/tests/test_filesystem.py b/tests/test_filesystem.py new file mode 100644 index 0000000..212b2f5 --- /dev/null +++ b/tests/test_filesystem.py @@ -0,0 +1,57 @@ +# Copyright 2017 ARM Limited, Google +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +import os +import sys + +import utils_tests +import trappy + +sys.path.append(os.path.join(utils_tests.TESTS_DIRECTORY, "..", "trappy")) + +class TestFilesystem(utils_tests.SetupDirectory): + def __init__(self, *args, **kwargs): + super(TestFilesystem, self).__init__( + [("trace_filesystem.txt", "trace_filesystem.txt"),], + *args, + **kwargs) + + def test_filesystem_ext_da_write_begin_can_be_parsed(self): + """TestFilesystem: test that ext4_da_write_begin events can be parsed""" + trace = trappy.FTrace("trace_filesystem.txt", events=['ext4_da_write_begin']) + df = trace.ext4_da_write_begin.data_frame + self.assertSetEqual(set(df.columns), + set(["__comm", "__cpu", "__line", "__pid", "__tgid", "dev", "inode", "pos", "len", "flags"])) + + def test_filesystem_ext_da_write_end_can_be_parsed(self): + """TestFilesystem: test that ext4_da_write_end events can be parsed""" + trace = trappy.FTrace("trace_filesystem.txt", events=['ext4_da_write_end']) + df = trace.ext4_da_write_end.data_frame + self.assertSetEqual(set(df.columns), + set(["__comm", "__cpu", "__line", "__pid", "__tgid", "dev", "inode", "pos", "len", "copied"])) + + def test_filesystem_ext_sync_file_enter_can_be_parsed(self): + """TestFilesystem: test that ext4_sync_file_enter events can be parsed""" + trace = trappy.FTrace("trace_filesystem.txt", events=['ext4_sync_file_enter']) + df = trace.ext4_sync_file_enter.data_frame + self.assertSetEqual(set(df.columns), + set(["__comm", "__cpu", "__line", "__pid", "__tgid", "dev", "inode", "parent", "datasync"])) + + def test_filesystem_ext_sync_file_exit_can_be_parsed(self): + """TestFilesystem: test that ext4_sync_file_exit events can be parsed""" + trace = trappy.FTrace("trace_filesystem.txt", events=['ext4_sync_file_exit']) + df = trace.ext4_sync_file_exit.data_frame + self.assertSetEqual(set(df.columns), + set(["__comm", "__cpu", "__line", "__pid", "__tgid", "dev", "inode", "ret"])) diff --git a/tests/test_ftrace.py b/tests/test_ftrace.py index e6f6319..ea702e5 100644 --- a/tests/test_ftrace.py +++ b/tests/test_ftrace.py @@ -170,6 +170,22 @@ class TestFTrace(BaseTestThermal): self.assertEqual(trace.get_duration(), duration) + def test_ftrace_duration_window(self): + """Test that duration is correct with time window (normalize_time=True)""" + trace = trappy.FTrace(normalize_time=True, window=[1, 5]) + + duration = trace.thermal_governor.data_frame.index[-1] - trace.thermal.data_frame.index[0] + + self.assertEqual(trace.get_duration(), duration) + + def test_ftrace_duration_window_not_normalized(self): + """Test that duration is correct with time window (normalize_time=False)""" + trace = trappy.FTrace(normalize_time=False, window=[1, 5]) + + duration = trace.thermal_governor.data_frame.index[-1] - trace.thermal.data_frame.index[0] + + self.assertEqual(trace.get_duration(), duration) + def test_ftrace_duration_not_normalized(self): """Test get_duration: normalize_time=True""" @@ -351,6 +367,26 @@ class TestFTrace(BaseTestThermal): self.assertEquals(trace.thermal.data_frame.iloc[0]["temp"], 68989) self.assertEquals(trace.thermal.data_frame.iloc[-1]["temp"], 69530) + def test_parse_tracing_mark_write_events(self): + """Check that tracing_mark_write events are parsed without errors""" + + in_data = """ sh-1379 [002] 353.397813: print: tracing_mark_write: TRACE_MARKER_START + shutils-1381 [001] 353.680439: print: tracing_mark_write: cpu_frequency: state=450000 cpu_id=5""" + + with open("trace.txt", "w") as fout: + fout.write(in_data) + + try: + trace = trappy.FTrace() + except TypeError as e: + self.fail("tracing_mark_write parsing failed with {} exception"\ + .format(e.message)) + # The second event is recognised as a cpu_frequency event and therefore + # put under trace.cpu_frequency + self.assertEquals(trace.tracing_mark_write.data_frame.iloc[-1]["string"], + "TRACE_MARKER_START") + self.assertEquals(len(trace.tracing_mark_write.data_frame), 1) + @unittest.skipUnless(utils_tests.trace_cmd_installed(), "trace-cmd not installed") diff --git a/tests/test_systrace.py b/tests/test_systrace.py index 667bf2c..5f8899b 100644 --- a/tests/test_systrace.py +++ b/tests/test_systrace.py @@ -93,6 +93,16 @@ class TestSystrace(utils_tests.SetupDirectory): self.assertEquals(dfr['__line'].iloc[1], 6) self.assertEquals(dfr['__line'].iloc[-1], 2505) + def test_parse_tracing_mark_write_events(self): + """Check that tracing_mark_write events are parsed without errors""" + events = ['tracing_mark_write'] + try: + trace = trappy.SysTrace("trace.html", events=events) + except TypeError as e: + self.fail("tracing_mark_write parsing failed with {} exception"\ + .format(e.message)) + + class TestLegacySystrace(utils_tests.SetupDirectory): def __init__(self, *args, **kwargs): diff --git a/tests/trace_common_clk.txt b/tests/trace_common_clk.txt new file mode 100644 index 0000000..90b9e99 --- /dev/null +++ b/tests/trace_common_clk.txt @@ -0,0 +1,8 @@ + VideoDecMsgThr-32342 [007] 85636.208531: clock_set_rate: video_subcore0_clk_src state=200000000 cpu_id=7 + VideoDecMsgThr-32342 [007] 85636.208637: clock_set_rate: mmss_video_subcore1_clk state=200000000 cpu_id=7 + VideoDecMsgThr-32342 [007] 85636.208640: clock_set_rate: video_subcore1_clk_src state=200000000 cpu_id=7 + writer-14965 [001] 85636.216529: clock_enable: blsp2_qup1_i2c_apps_clk_src state=1 cpu_id=1 + writer-14965 [001] 85636.216531: clock_enable: gcc_blsp2_qup1_i2c_apps_clk state=1 cpu_id=1 + writer-14965 [000] 85636.216771: clock_disable: gcc_blsp2_qup1_i2c_apps_clk state=0 cpu_id=0 + writer-14965 [000] 85636.216774: clock_disable: blsp2_qup1_i2c_apps_clk_src state=0 cpu_id=0 + writer-14965 [000] 85636.216801: clock_enable: blsp2_qup1_i2c_apps_clk_src state=1 cpu_id=0 diff --git a/tests/trace_filesystem.txt b/tests/trace_filesystem.txt new file mode 100644 index 0000000..b67e47e --- /dev/null +++ b/tests/trace_filesystem.txt @@ -0,0 +1,44 @@ + <...>-1297 [001] 3843.734440: ext4_da_write_end: dev 8,13 ino 5898483 pos 0 len 4096 copied 4096 + <...>-1297 [001] 3843.734450: ext4_da_write_begin: dev 8,13 ino 5898483 pos 4096 len 4096 flags 0 + <...>-1297 [001] 3843.734459: ext4_da_write_end: dev 8,13 ino 5898483 pos 4096 len 4096 copied 4096 + <...>-1297 [001] 3843.737430: ext4_da_write_begin: dev 8,13 ino 5898483 pos 8192 len 2625 flags 0 + <...>-1297 [001] 3843.737466: ext4_da_write_end: dev 8,13 ino 5898483 pos 8192 len 2625 copied 2625 + <...>-1297 [001] 3843.737514: ext4_sync_file_enter: dev 8,13 ino 5898483 parent 5898244 datasync 0 + <...>-1297 [007] 3843.744284: ext4_sync_file_exit: dev 8,13 ino 5898483 ret 0 + <...>-13777 [007] 3844.034373: ext4_da_write_begin: dev 8,13 ino 3540268 pos 0 len 512 flags 0 + <...>-13777 [007] 3844.034400: ext4_da_write_end: dev 8,13 ino 3540268 pos 0 len 512 copied 512 + <...>-13777 [007] 3844.034410: ext4_da_write_begin: dev 8,13 ino 3540268 pos 512 len 4 flags 0 + <...>-13777 [007] 3844.034412: ext4_da_write_end: dev 8,13 ino 3540268 pos 512 len 4 copied 4 + <...>-13777 [007] 3844.034415: ext4_da_write_begin: dev 8,13 ino 3540268 pos 516 len 3580 flags 0 + <...>-13777 [007] 3844.034417: ext4_da_write_end: dev 8,13 ino 3540268 pos 516 len 3580 copied 3580 + <...>-13777 [007] 3844.034419: ext4_da_write_begin: dev 8,13 ino 3540268 pos 4096 len 516 flags 0 + <...>-13777 [007] 3844.034425: ext4_da_write_end: dev 8,13 ino 3540268 pos 4096 len 516 copied 516 + <...>-13777 [007] 3844.034429: ext4_da_write_begin: dev 8,13 ino 3540268 pos 4612 len 4 flags 0 + <...>-13777 [007] 3844.034430: ext4_da_write_end: dev 8,13 ino 3540268 pos 4612 len 4 copied 4 + <...>-13777 [007] 3844.034439: ext4_da_write_begin: dev 8,13 ino 3540268 pos 4616 len 4 flags 0 + <...>-13777 [007] 3844.034440: ext4_da_write_end: dev 8,13 ino 3540268 pos 4616 len 4 copied 4 + <...>-13777 [007] 3844.034443: ext4_da_write_begin: dev 8,13 ino 3540268 pos 4620 len 3572 flags 0 + <...>-13777 [007] 3844.034445: ext4_da_write_end: dev 8,13 ino 3540268 pos 4620 len 3572 copied 3572 + <...>-13777 [007] 3844.034446: ext4_da_write_begin: dev 8,13 ino 3540268 pos 8192 len 524 flags 0 + <...>-13777 [007] 3844.034451: ext4_da_write_end: dev 8,13 ino 3540268 pos 8192 len 524 copied 524 + <...>-13777 [007] 3844.034455: ext4_da_write_begin: dev 8,13 ino 3540268 pos 8716 len 4 flags 0 + <...>-13777 [007] 3844.034456: ext4_da_write_end: dev 8,13 ino 3540268 pos 8716 len 4 copied 4 + <...>-13777 [007] 3844.034539: ext4_da_write_begin: dev 8,13 ino 3540268 pos 8720 len 4 flags 0 + <...>-13777 [007] 3844.034542: ext4_da_write_end: dev 8,13 ino 3540268 pos 8720 len 4 copied 4 + <...>-13777 [007] 3844.034548: ext4_da_write_begin: dev 8,13 ino 3540268 pos 8724 len 3564 flags 0 + <...>-13777 [007] 3844.034550: ext4_da_write_end: dev 8,13 ino 3540268 pos 8724 len 3564 copied 3564 + <...>-13777 [007] 3844.034552: ext4_da_write_begin: dev 8,13 ino 3540268 pos 12288 len 532 flags 0 + <...>-13777 [007] 3844.034559: ext4_da_write_end: dev 8,13 ino 3540268 pos 12288 len 532 copied 532 + <...>-13777 [007] 3844.034563: ext4_da_write_begin: dev 8,13 ino 3540268 pos 12820 len 4 flags 0 + <...>-13777 [007] 3844.034565: ext4_da_write_end: dev 8,13 ino 3540268 pos 12820 len 4 copied 4 + <...>-13777 [007] 3844.034572: ext4_sync_file_enter: dev 8,13 ino 3540268 parent 3539203 datasync 1 + <...>-13777 [004] 3844.042103: ext4_sync_file_exit: dev 8,13 ino 3540268 ret 0 + <...>-13777 [004] 3844.042145: ext4_sync_file_enter: dev 8,13 ino 3539203 parent 3407880 datasync 1 + <...>-13777 [004] 3844.042146: ext4_sync_file_exit: dev 8,13 ino 3539203 ret 0 + <...>-13777 [004] 3844.042176: ext4_da_write_begin: dev 8,13 ino 3540268 pos 0 len 12 flags 0 + <...>-13777 [004] 3844.042181: ext4_da_write_end: dev 8,13 ino 3540268 pos 0 len 12 copied 12 + <...>-13777 [004] 3844.042186: ext4_sync_file_enter: dev 8,13 ino 3540268 parent 3539203 datasync 1 + <...>-13777 [005] 3844.042781: ext4_sync_file_exit: dev 8,13 ino 3540268 ret 0 + <...>-13777 [005] 3844.042801: ext4_da_write_begin: dev 8,13 ino 3539230 pos 0 len 4096 flags 0 + <...>-13777 [005] 3844.042805: ext4_da_write_end: dev 8,13 ino 3539230 pos 0 len 4096 copied 4096 + <...>-13777 [005] 3844.042809: ext4_da_write_begin: dev 8,13 ino 3539230 pos 12288 len 4096 flags 0 diff --git a/trappy/bare_trace.py b/trappy/bare_trace.py index a953a60..c2f4b04 100644 --- a/trappy/bare_trace.py +++ b/trappy/bare_trace.py @@ -37,21 +37,20 @@ class BareTrace(object): def get_duration(self): """Returns the largest time value of all classes, returns 0 if the data frames of all classes are empty""" - durations = [] + max_durations = [] + min_durations = [] for trace_class in self.trace_classes: try: - durations.append(trace_class.data_frame.index[-1]) + max_durations.append(trace_class.data_frame.index[-1]) + min_durations.append(trace_class.data_frame.index[0]) except IndexError: pass - if len(durations) == 0: + if len(min_durations) == 0 or len(max_durations) == 0: return 0 - if self.normalized_time: - return max(durations) - else: - return max(durations) - self.basetime + return max(max_durations) - min(min_durations) def get_filters(self, key=""): """Returns an array with the available filters. @@ -141,5 +140,5 @@ class BareTrace(object): trace_class.create_dataframe() trace_class.finalize_object() - def generate_data_dict(self): + def generate_data_dict(self, data_str): return None diff --git a/trappy/common_clk.py b/trappy/common_clk.py new file mode 100644 index 0000000..7bccb9c --- /dev/null +++ b/trappy/common_clk.py @@ -0,0 +1,58 @@ +# Copyright 2017 Google, ARM Limited +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +""" +Definitions of common_clk (CONFIG_COMMON_CLK) trace parsers +registered by the FTrace class +""" + +from trappy.base import Base +from trappy.dynamic import register_ftrace_parser, register_dynamic_ftrace + +class CommonClkBase(Base): + #clock traces are of the form "clk_name field0=x field1=y ..." + def generate_data_dict(self, data_str): + clk_name, fields = data_str.split(' ', 1) + ret = super(CommonClkBase, self).generate_data_dict(fields) + ret['clk_name'] = clk_name + return ret + +class CommonClkEnable(CommonClkBase): + """Corresponds to Linux kernel trace event clock_enable""" + + unique_word = "clock_enable:" + """The unique word that will be matched in a trace line""" + +register_ftrace_parser(CommonClkEnable) + +class CommonClkDisable(CommonClkBase): + """Corresponds to Linux kernel trace event clock_disable""" + + unique_word = "clock_disable:" + """The unique word that will be matched in a trace line""" + +register_ftrace_parser(CommonClkDisable) + +class CommonClkSetRate(CommonClkBase): + """Corresponds to Linux kernel trace event clock_set_rate""" + + unique_word = "clock_set_rate:" + """The unique word that will be matched in a trace line""" + + def finalize_object(self): + self.data_frame.rename(columns={'state':'rate'}, inplace=True) + +register_ftrace_parser(CommonClkSetRate) diff --git a/trappy/filesystem.py b/trappy/filesystem.py new file mode 100644 index 0000000..0c4a57d --- /dev/null +++ b/trappy/filesystem.py @@ -0,0 +1,67 @@ +# Copyright 2017 Google, ARM Limited +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + + +""" +Definitions of filesystem (ext4) trace parsers +registered by the FTrace class +""" + +from trappy.base import Base +from trappy.dynamic import register_ftrace_parser, register_dynamic_ftrace + +class FilesystemExt4Base(Base): + def generate_data_dict(self, data_str): + #filesystem traces are space delimited in the form: + #fieldA valueA fieldB valueB ... + data = data_str.split(' ') + return zip(data[0::2], data[1::2]) + + def finalize_object(self): + self.data_frame.rename(columns={'ino':'inode'}, inplace=True) + + +class FilesystemExt4DaWriteBegin(FilesystemExt4Base): + """Corresponds to Linux kernel trace event ext4_da_write_begin""" + + unique_word = "ext4_da_write_begin:" + """The unique word that will be matched in a trace line""" + + +register_ftrace_parser(FilesystemExt4DaWriteBegin) + +class FilesystemExt4DaWriteEnd(FilesystemExt4Base): + """Corresponds to Linux kernel trace event ext4_da_write_end""" + + unique_word = "ext4_da_write_end:" + """The unique word that will be matched in a trace line""" + +register_ftrace_parser(FilesystemExt4DaWriteEnd) + +class FilesystemExt4SyncFileEnter(FilesystemExt4Base): + """Corresponds to Linux kernel trace event ext4_sync_file_enter""" + + unique_word = "ext4_sync_file_enter:" + """The unique word that will be matched in a trace line""" + +register_ftrace_parser(FilesystemExt4SyncFileEnter) + +class FilesystemExt4SyncFileExit(FilesystemExt4Base): + """Corresponds to Linux kernel trace event ext4_sync_file_exit""" + + unique_word = "ext4_sync_file_exit:" + """The unique word that will be matched in a trace line""" + +register_ftrace_parser(FilesystemExt4SyncFileExit) diff --git a/trappy/ftrace.py b/trappy/ftrace.py index 3948cb6..ec7b002 100644 --- a/trappy/ftrace.py +++ b/trappy/ftrace.py @@ -66,7 +66,7 @@ subclassed by FTrace (for parsing FTrace coming from trace-cmd) and SysTrace.""" dynamic_classes = {} - disable_cache = False + disable_cache = True def _trace_cache_path(self): trace_file = self.trace_path diff --git a/trappy/utils.py b/trappy/utils.py index 47ef4ab..a06ff1d 100644 --- a/trappy/utils.py +++ b/trappy/utils.py @@ -155,7 +155,7 @@ def merge_dfs(pr_df, sec_df, pivot): data['Time'] = data['Time'][1] merged_data.append(data) - df = pd.concat([pr_df, sec_df], keys=['primary', 'secondary']).sort(columns='__line') + df = pd.concat([pr_df, sec_df], keys=['primary', 'secondary']).sort_values(by='__line') apply_callback(df, df_fn) merged_df = pd.DataFrame.from_dict(merged_data) merged_df.set_index('Time', inplace=True) |