@@ -21,6 +21,7 @@ import (
2121 "fmt"
2222 "math"
2323 "sort"
24+ "time"
2425
2526 "github.com/ethereum/go-ethereum/common"
2627 "github.com/ethereum/go-ethereum/common/lru"
@@ -301,6 +302,11 @@ func (r *mapRenderer) run(stopCb func() bool, writeCb func()) (bool, error) {
301302
302303// renderCurrentMap renders a single map.
303304func (r * mapRenderer ) renderCurrentMap (stopCb func () bool ) (bool , error ) {
305+ var (
306+ totalTime time.Duration
307+ logValuesProcessed , blocksProcessed int64
308+ )
309+ start := time .Now ()
304310 if ! r .iterator .updateChainView (r .f .targetView ) {
305311 return false , errChainUpdate
306312 }
@@ -316,9 +322,11 @@ func (r *mapRenderer) renderCurrentMap(stopCb func() bool) (bool, error) {
316322 for r .iterator .lvIndex < uint64 (r .currentMap .mapIndex + 1 )<< r .f .logValuesPerMap && ! r .iterator .finished {
317323 waitCnt ++
318324 if waitCnt >= valuesPerCallback {
325+ totalTime += time .Since (start )
319326 if stopCb () {
320327 return false , nil
321328 }
329+ start = time .Now ()
322330 if ! r .iterator .updateChainView (r .f .targetView ) {
323331 return false , errChainUpdate
324332 }
@@ -343,8 +351,10 @@ func (r *mapRenderer) renderCurrentMap(stopCb func() bool) (bool, error) {
343351 return false , fmt .Errorf ("failed to advance log iterator at %d while rendering map %d: %v" , r .iterator .lvIndex , r .currentMap .mapIndex , err )
344352 }
345353 if ! r .iterator .skipToBoundary {
354+ logValuesProcessed ++
346355 r .currentMap .lastBlock = r .iterator .blockNumber
347356 if r .iterator .blockStart {
357+ blocksProcessed ++
348358 r .currentMap .blockLvPtrs = append (r .currentMap .blockLvPtrs , r .iterator .lvIndex )
349359 }
350360 if ! r .f .testDisableSnapshots && r .renderBefore >= r .f .indexedRange .maps .AfterLast () &&
@@ -358,12 +368,18 @@ func (r *mapRenderer) renderCurrentMap(stopCb func() bool) (bool, error) {
358368 r .currentMap .headDelimiter = r .iterator .lvIndex
359369 }
360370 r .currentMap .lastBlockId = r .f .targetView .getBlockId (r .currentMap .lastBlock )
371+ totalTime += time .Since (start )
372+ mapRenderTimer .Update (totalTime )
373+ mapLogValueMeter .Mark (logValuesProcessed )
374+ mapBlockMeter .Mark (blocksProcessed )
361375 return true , nil
362376}
363377
364378// writeFinishedMaps writes rendered maps to the database and updates
365379// filterMapsRange and indexedView accordingly.
366380func (r * mapRenderer ) writeFinishedMaps (pauseCb func () bool ) error {
381+ var totalTime time.Duration
382+ start := time .Now ()
367383 if len (r .finishedMaps ) == 0 {
368384 return nil
369385 }
@@ -379,7 +395,7 @@ func (r *mapRenderer) writeFinishedMaps(pauseCb func() bool) error {
379395 if err != nil {
380396 return fmt .Errorf ("failed to get updated rendered range: %v" , err )
381397 }
382- renderedView := r .f .targetView // stopCb callback might still change targetView while writing finished maps
398+ renderedView := r .f .targetView // pauseCb callback might still change targetView while writing finished maps
383399
384400 batch := r .f .db .NewBatch ()
385401 var writeCnt int
@@ -393,7 +409,9 @@ func (r *mapRenderer) writeFinishedMaps(pauseCb func() bool) error {
393409 // do not exit while in partially written state but do allow processing
394410 // events and pausing while block processing is in progress
395411 r .f .indexLock .Unlock ()
412+ totalTime += time .Since (start )
396413 pauseCb ()
414+ start = time .Now ()
397415 r .f .indexLock .Lock ()
398416 batch = r .f .db .NewBatch ()
399417 }
@@ -477,6 +495,8 @@ func (r *mapRenderer) writeFinishedMaps(pauseCb func() bool) error {
477495 if err := batch .Write (); err != nil {
478496 log .Crit ("Error writing log index update batch" , "error" , err )
479497 }
498+ totalTime += time .Since (start )
499+ mapWriteTimer .Update (totalTime )
480500 return nil
481501}
482502
0 commit comments