#!/usr/bin/env python

import sys
import mapnik
#import mapnik
from timeit import Timer, time

if not len(sys.argv) >= 3:
    sys.exit('usage: mapnik-speed-check <stylesheet> <iterations> [minx,miny,maxx,maxy]')

m = mapnik.Map(256,256)
stylesheet = sys.argv[1]

TOTAL_TIME = 0

def load():
    global TOTAL_TIME
    global stylesheet
    start = time.time()
    m = mapnik.Map(256,256)
    mapnik.load_map(m,stylesheet)
    TOTAL_TIME += (time.time() - start)

def init(stylesheet):
    mapnik.load_map(m,stylesheet)
    m.zoom_all()

def render():
    global TOTAL_TIME
    start = time.time()
    im = mapnik.Image(m.width,m.height)
    mapnik.render(m,im)
    TOTAL_TIME += (time.time() - start)

def f_(set):
    min_ = str(min(set)*1000)[:6]
    avg = str((sum(set)/len(set))*1000)[:6]
    print 'min: %sms | avg: %sms | total: %ss' % (min_,avg,str(TOTAL_TIME)[:6])

if __name__=='__main__':
    # if passed, set up bbox

    #test_ = "load()"
    test_ = "render()"
    init(stylesheet)

    if len(sys.argv) == 4:
        bbox = sys.argv[3]
        if ',' in bbox:
            parts = bbox.split(',')
        else:
            parts = bbox.split(' ')
        env = mapnik.Box2d(*map(float,parts))
        m.zoom_to_box(env)
    
    # load once - making sure mmap'd shapefiles are loaded
    eval(test_)
    TOTAL_TIME = 0
    
    # now actually run the test
    t = Timer(test_, "from __main__ import %s" % test_.replace('()',''))
    iterations = int(sys.argv[2])
    f_(t.repeat(iterations,1))