       # 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()


    # I think it's OK to just push the event-epoch out (which should allow the request-image-dialog to fire)
    # eventEpoch.flushEpochNow  = => @flushEpochNow()

    eventEpoch.logEvent = ArtFrameStats.logEvent # (name, id) => @logEvent name, id

  allowFluxOnIdle: (nextNSeconds)->
    @_fluxOnIdleOkUntil = currentSecond() + nextNSeconds

  # _resetThisCyclesStats: ->
  #   @performanceSamples = {}

  ############################
  # FrameStats: DEPRICATED - use ArtFrameStats
  ############################

  logEvent:             ArtFrameStats.logEvent
  startTimePerformance: ArtFrameStats.startTimer
  endTimePerformance:   ArtFrameStats.endTimer

  # addPerformanceSample: (name, value) ->
  #   throw new Error "@performanceSamples not set" unless @performanceSamples
  #   @performanceSamples[name] = (@performanceSamples[name] || 0) + value
  #   # @fluxFrameTime = @reactFrameTime = @eventFrameTime = @idleFrametime = @aimUpdateFrameTime = @drawFrameTime = 0

  # timerStack = []
  # timePerformance: (name, f) ->
  #   start = @startTimePerformance()
  #   f()
  #   @endTimePerformance name, start
  # logEvent: (name, id) ->
  #   @globalEpochStats?.logEvent name, id

  # startTimePerformance: ->
  #   start = currentSecond()
  #   timerStack.push 0
  #   start

  # endTimePerformance: (name, start) ->
  #   subTimeTotal = timerStack.pop()
  #   elapsedTime = currentSecond() - start
  #   if (tsl = timerStack.length) > 0
  #     timerStack[tsl-1] += elapsedTime

  #   @addPerformanceSample name, elapsedTime - subTimeTotal

  ############################
  # </FrameStats>
