Exemplo n.º 1
0
    def test_get_traces_intern_traceback(self):
        # dummy wrappers to get more useful and identical frames in the traceback
        def allocate_bytes2(size):
            return allocate_bytes(size)

        def allocate_bytes3(size):
            return allocate_bytes2(size)

        def allocate_bytes4(size):
            return allocate_bytes3(size)

        # Ensure that two identical tracebacks are not duplicated
        mprofile.stop()
        mprofile.start(4)
        obj_size = 123
        obj1, obj1_traceback = allocate_bytes4(obj_size)
        obj2, obj2_traceback = allocate_bytes4(obj_size)

        traces = mprofile._get_traces()

        obj1_traceback._frames = tuple(reversed(obj1_traceback._frames))
        obj2_traceback._frames = tuple(reversed(obj2_traceback._frames))

        trace1 = self.find_trace(traces, obj1_traceback)
        trace2 = self.find_trace(traces, obj2_traceback)
        size1, traceback1 = trace1
        size2, traceback2 = trace2
        self.assertIs(traceback2, traceback1)
Exemplo n.º 2
0
    def test_get_traced_memory(self):
        # Python allocates some internals objects, so the test must tolerate
        # a small difference between the expected size and the real usage
        max_error = 2048

        # allocate one object
        obj_size = 1024 * 1024
        mprofile.clear_traces()
        obj, obj_traceback = allocate_bytes(obj_size)
        size, peak_size = mprofile.get_traced_memory()
        self.assertGreaterEqual(size, obj_size)
        self.assertGreaterEqual(peak_size, size)

        self.assertLessEqual(size - obj_size, max_error)
        self.assertLessEqual(peak_size - size, max_error)

        # destroy the object
        obj = None
        size2, peak_size2 = mprofile.get_traced_memory()
        self.assertLess(size2, size)
        self.assertGreaterEqual(size - size2, obj_size - max_error)
        self.assertGreaterEqual(peak_size2, peak_size)

        # clear_traces() must reset traced memory counters
        mprofile.clear_traces()
        self.assertEqual(mprofile.get_traced_memory(), (0, 0))

        # allocate another object
        obj, obj_traceback = allocate_bytes(obj_size)
        size, peak_size = mprofile.get_traced_memory()
        self.assertGreaterEqual(size, obj_size)

        # stop() also resets traced memory counters
        mprofile.stop()
        self.assertEqual(mprofile.get_traced_memory(), (0, 0))
Exemplo n.º 3
0
    def test_profile_1frame(self):
        mprofile.start(max_frames=1)
        alloc_obj = object()
        snap = mprofile.take_snapshot()
        mprofile.stop()

        self.assertEqual(len(snap.traces), 1)
        self.assertEqual(len(snap.traces[0].traceback), 1)
Exemplo n.º 4
0
    def test_profile_one(self):
        mprofile.start()
        alloc_obj = object()
        snap = mprofile.take_snapshot()
        mprofile.stop()

        self.assertEqual(len(snap.traces), 1)
        frame = snap.traces[0].traceback[-1]
        self.assertTrue(frame.filename.endswith("test_mprofile.py"))
        self.assertEqual(frame.name, "test_profile_one")
        self.assertEqual(frame.firstlineno, 16)
        self.assertEqual(frame.lineno, 18)
Exemplo n.º 5
0
    def test_profile_concurrent(self):
        mprofile.start()
        t1 = threading.Thread(target=alloc_objects)
        t1.start()
        time.sleep(0.001)
        t2 = threading.Thread(target=alloc_objects)
        t2.start()

        time.sleep(0.001)
        snap = mprofile.take_snapshot()
        t1.join()
        mprofile.stop()
        t2.join()
Exemplo n.º 6
0
    def test_profile(self):
        mprofile.start()
        large_alloc = [object() for _ in range(12)]
        snap = mprofile.take_snapshot()
        mprofile.stop()

        # Snapshot references should remain valid after stopping profiler.
        found_it = False
        for trace in snap.traces:
            for frame in trace.traceback:
                if frame.name == "test_profile":
                    found_it = True
        self.assertTrue(found_it)
Exemplo n.º 7
0
    def test_snapshot(self):
        obj, source = allocate_bytes(123)

        # take a snapshot
        snapshot = mprofile.take_snapshot()

        # mprofile must be tracing memory allocations to take a snapshot
        mprofile.stop()
        with self.assertRaises(RuntimeError) as cm:
            mprofile.take_snapshot()
        self.assertEqual(
            str(cm.exception),
            "the mprofile module must be tracing memory "
            "allocations to take a snapshot",
        )
Exemplo n.º 8
0
    def test_get_traces(self):
        mprofile.clear_traces()
        obj_size = 12345
        obj, obj_traceback = allocate_bytes(obj_size)

        traces = mprofile._get_traces()
        trace = self.find_trace(traces, obj_traceback)

        self.assertIsInstance(trace, tuple)
        size, traceback = trace
        self.assertEqual(size, obj_size)
        self.assertEqual(traceback, obj_traceback._frames)

        mprofile.stop()
        self.assertEqual(mprofile._get_traces(), [])
Exemplo n.º 9
0
    def test_profile_sampler(self):
        n = 100000
        mprofile.start(sample_rate=1024)
        alloc_obj = [object() for _ in range(n)]
        snap = mprofile.take_snapshot()
        mprofile.stop()

        self.assertGreaterEqual(len(snap.traces), 0)
        self.assertLessEqual(len(snap.traces), n)
        self.assertGreaterEqual(len(snap.traces[0].traceback), 2)

        stats = snap.statistics("traceback")
        self.assertGreaterEqual(len(stats), 1)
        self.assertGreaterEqual(stats[0].count, len(snap.traces))
        self.assertGreaterEqual(stats[0].size,
                                sum(t.size for t in snap.traces))
Exemplo n.º 10
0
    def test_set_traceback_limit(self):
        obj_size = 10

        mprofile.stop()
        self.assertRaises(ValueError, mprofile.start, -1)

        mprofile.stop()
        mprofile.start(10)
        obj2, obj2_traceback = allocate_bytes(obj_size)
        traceback = mprofile.get_object_traceback(obj2)
        self.assertEqual(len(traceback), 10)
        self.assertEqual(traceback, obj2_traceback)

        mprofile.stop()
        mprofile.start(1)
        obj, obj_traceback = allocate_bytes(obj_size)
        traceback = mprofile.get_object_traceback(obj)
        self.assertEqual(len(traceback), 1)
        self.assertEqual(traceback, obj_traceback)
Exemplo n.º 11
0
 def tearDownClass(cls):
     cls.server.shutdown()
     mprofile.stop()
Exemplo n.º 12
0
 def tearDown(self):
     mprofile.stop()
Exemplo n.º 13
0
    def test_is_tracing(self):
        mprofile.stop()
        self.assertFalse(mprofile.is_tracing())

        mprofile.start()
        self.assertTrue(mprofile.is_tracing())