       # console.warn "GlobalEpochCycle: processed maximum state and event cycles (#{@getEpochLength()}) before Draw."
       @queueNextEpoch()
 
-    if drawCount > 0
-      globalEpochFrameTime = currentSecond() - startTime
-
-      gc = Foundation.globalCounts
-      # log ReactComponent_Rendered:gc.ReactComponent_Rendered
-      if false #globalEpochFrameTime > 1/60
-        keys = Object.keys(gc).sort()
-        sorted = {}
-        for k in keys
-          v = gc[k]
-          v = toMs v if v > 0 && v < 1
-          if isPlainObject v
-            for k2, v2 of v when v2 >0 && v2< 1
-              v[k2] = toMs v2
-          sorted[k] = v
-
-        log
-          globalCounts:sorted
-          fps:(1/globalEpochFrameTime).toFixed(1)
-
-        reactWork = (gc["ReactComponent_Created"] || 0) + (gc["ReactVirtualElement_Created"] || 0)
-        reactWastedWork = (gc["ReactComponent_UpdateFromTemporaryComponent_NoChange"] || 0) + (gc["ReactVirtualElement_UpdateFromTemporaryVirtualElement_NoChange"] || 0)
-        if reactWork > 0
-          log
-            reactWork: reactWork
-            reactWastedWork: reactWastedWork
-            reactEfficiency: 1 - reactWastedWork / reactWork
-
-      @globalEpochStats?.add startTime, globalEpochFrameTime, @performanceSamples
-        # flux:   @fluxFrameTime
-        # event:  @eventFrameTime
-        # react:  @reactFrameTime
-        # aim:    @aimUpdateFrameTime
-        # draw:   @drawFrameTime
-
+    # if drawCount > 0
+    #   @globalEpochStats?.add startTime, currentSecond() - startTime, @performanceSamples
+
+    ArtFrameStats.endFrame()

    drawEpoch._frameSecond = @_frameSecond

    Foundation.resetGlobalCounts()
    startTime = currentSecond()

    @_resetThisCyclesStats()
    @processingCycle = true
    @_processCycleExceptDraw()


    @processingCycle = false
    @activeCanvasElements = []
    @_fluxOnIdleOkUntil = currentSecond()
    # @_resetThisCyclesStats()

    idleEpoch.queueNextEpoch  =
    stateEpoch.queueNextEpoch =
