def run(self):
        self.capture_filename = self.get_capture()

        self.check(os.path.exists(self.capture_filename), "Didn't generate capture in make_capture")

        rdtest.log.print("Loading capture")

        memory_before: int = rd.GetCurrentProcessMemoryUsage()
        start_time = time.time()

        self.controller = rdtest.open_capture(self.capture_filename, opts=self.get_replay_options())

        duration = time.time() - start_time
        memory_after: int = rd.GetCurrentProcessMemoryUsage()

        memory_increase = memory_after - memory_before

        rdtest.log.print("Loaded capture in {:02} seconds, consuming {} bytes of memory".format(duration, memory_increase))

        if memory_increase > 1200*1000*1000:
            raise rdtest.TestFailureException("Memory usage is too high".format(duration))
        else:
            rdtest.log.success("Memory usage is OK")

        if rd.IsReleaseBuild():
            if duration >= 2.5:
                raise rdtest.TestFailureException("Time to load is too high")
            rdtest.log.success("Time to load is OK")
        else:
            rdtest.log.print("Not checking time to load in non-release build")

        if self.controller is not None:
            self.controller.Shutdown()
Exemple #2
0
    def check_capture(self):
        memory: int = rd.GetCurrentProcessMemoryUsage()

        if memory > 500 * 1000 * 1000:
            raise rdtest.TestFailureException(
                "Memory usage of {} is too high".format(memory))

        rdtest.log.success(
            "Capture {} opened with reasonable memory ({})".format(
                self.demos_frame_cap, memory))
Exemple #3
0
    def repeat_load(self, path):
        memory_peak = memory_baseline = 0

        for i in range(20):
            rdtest.log.print("Loading for iteration {}".format(i))

            try:
                controller = rdtest.open_capture(path)
            except RuntimeError as err:
                rdtest.log.print("Skipping. Can't open {}: {}".format(
                    path, err))
                return

            # Do nothing, just ensure it's loaded
            memory_usage: int = rd.GetCurrentProcessMemoryUsage()

            # We measure the baseline memory usage during the second peak to avoid any persistent caches etc that might
            # not be full
            if i == 1:
                memory_baseline = memory_usage
            memory_peak = max(memory_peak, memory_usage)

            controller.Shutdown()

            pct_over = 'N/A'

            if memory_baseline > 0:
                pct_over = '{:.2f}%'.format(
                    (memory_usage / memory_baseline) * 100)

            rdtest.log.success(
                "Succeeded iteration {}, memory usage was {} ({} of baseline)".
                format(i, memory_usage, pct_over))

        pct_over = '{:.2f}%'.format((memory_peak / memory_baseline) * 100)
        msg = 'peak memory usage was {}, {} compared to baseline {}'.format(
            memory_peak, pct_over, memory_baseline)

        if memory_baseline * 1.25 < memory_peak:
            raise rdtest.TestFailureException(msg)
        else:
            rdtest.log.success(msg)