0 Replies
      Latest reply on Apr 30, 2020 3:43 AM by alienspaces
      alienspaces Level 1 Level 1 (20 points)

        I'm trying to get a handle on XCTest performance measurement, but they don't seem to work the way I understand them (which is very possibly incorrect).


        There are:


        defaultMetrics: [XCTMetric] - "Subclasses of XCTestCase can override this property to change the default metrics."

        - which includes: XCTClockMetric, XCTCPUMetric, XCTMemoryMetric, et al.




        defaultPerformanceMetrics: [XCTPerformanceMetric] - "Subclasses of XCTestCase can override this method to change the behavior of measure(_:)."

        - which includes the sole: wallClockTime: XCTPerformanceMetric


        If I override:


            override class var defaultMetrics: [XCTMetric] {
                return [XCTMemoryMetric(), XCTCPUMetric(), XCTClockMetric()]


        and call:




        All I see in the report is Duration and Time.


        Yet if I pass an array of metrics in,


        self.measure(metrics: [XCTMemoryMetric(), XCTCPUMetric(), XCTClockMetric()], block: work)


        it works and displays CPU Cycles and Memory Physical etc.


        Shouldn't the measure() method use the defaults I've specified?


        Also, if I've overridden defaultPerformaceMetrics(), those metrics are only displayed if I don't pass XCTMetrics to measure(metrics:).


        Ultimately, what I want is a report that displays the XCTMetrics I specify as well as the XCTPerformanceMetrics. I know there are other perf metrics beyond just wallClockTime.