diff options
| author | qdp <qdp@tinyerp.com> | 2008-12-23 16:58:47 +0100 |
|---|---|---|
| committer | qdp <qdp@tinyerp.com> | 2008-12-23 16:58:47 +0100 |
| commit | cd6b3e1941b30ae93d41ff64df04ae8df1ce1f90 (patch) | |
| tree | f039a7341cc366da7321d79394a2430e4e38e584 /addons/base_module_quality/speed_test | |
| parent | 5daa2f6a58fddaef074b1ab226264f727cfd43d2 (diff) | |
improvement of base_module_quality:
*changed signature of run_test() method, added cr and uid
*switched wizard to osv_memory, to use text_wiki in the result window
*improved method_test.py, added score computation, corrected self.bool_installed_only var, use text_wiki widget
*implemented speed_test.py, first throw
*improvement of base_module_quality/wizard/module_quality_check.py
bzr revid: qdp@tinyerp.com-20081223155847-4qm6095jomgwvuju
Diffstat (limited to 'addons/base_module_quality/speed_test')
| -rw-r--r-- | addons/base_module_quality/speed_test/speed_test.py | 78 |
1 files changed, 73 insertions, 5 deletions
diff --git a/addons/base_module_quality/speed_test/speed_test.py b/addons/base_module_quality/speed_test/speed_test.py index 89479ddf18b..7858974dd00 100644 --- a/addons/base_module_quality/speed_test/speed_test.py +++ b/addons/base_module_quality/speed_test/speed_test.py @@ -24,6 +24,9 @@ import netsvc from osv import fields, osv import os from tools import config +import pooler +import time + from base_module_quality import base_module_quality @@ -32,19 +35,84 @@ class quality_test(base_module_quality.abstract_quality_check): def __init__(self): self.result = """ -Speed Test: ------------- +===Speed Test=== - This test checks the speed of the module +This test checks the speed of the module. - to be continued... """ self.bool_installed_only = True return None - def run_test(self, module_path): + def run_test(self, cr, uid, module_path): + pool = pooler.get_pool(cr.dbname) + module_name = module_path.split('/')[-1] + self.result+=('{| border="1" cellspacing="0" cellpadding="5" align="left" \n! %-40s \n! %-10s \n! %-10s \n! %-10s \n! %-10s \n! %-20s') % ('Object Name'.ljust(40), 'Size (S)'.ljust(10), '1'.ljust(10), 'S/2'.ljust(10), 'S'.ljust(10), 'Complexity'.ljust(20)) + ids2 = pool.get('ir.model.data').search(cr, uid, [('module','=', module_name), ('model','=','ir.model')]) + model_data = pool.get('ir.model.data').browse(cr, uid, ids2) + model_list = [] + for model in model_data: + model_list.append(model.res_id) + obj_list = [] + for mod in pool.get('ir.model').browse(cr, uid, model_list): + obj_list.append(str(mod.model)) + + obj_counter = 0 + score = 0 + for obj in obj_list: + obj_counter += 1 + ids = pool.get(obj).search(cr, uid, []) + ids = ids[:100] + size = len(ids) + if size: + c1 = time.time() + pool.get(obj).read(cr, uid, ids[0]) + c2 = time.time() + base_time = c2 - c1 + + c1 = time.time() + pool.get(obj).read(cr, uid, ids[:size/2]) + c2 = time.time() + halfsize_time = c2 - c1 + + c1 = time.time() + pool.get(obj).read(cr, uid, ids) + c2 = time.time() + size_time = c2 - c1 + if size < 5: + self.score += -2 + self.result += ('\n|-\n| %s \n| %s \n| %s \n| %s \n| %s \n| %s ') % (obj, size, base_time, halfsize_time, size_time, "Warning! Not enough demo data") + else: + tolerated_margin = 5/100 + complexity = "not recognized" + if min(size_time,base_time,halfsize_time) != base_time: + complexity = "O(1)" + score += 10 + + else: + k1 = (halfsize_time - base_time)*1000 / ((size/2) - 1) + k2 = (size_time - base_time)*1000 / ((size) - 1) + tmp = k1 * tolerated_margin + if (k1 - tmp) < k2 and k2 < (k1 + tmp): + complexity = "O(n)" + if round(tmp) == 0: + complexity = "O(1)" + score += 10 + else: + score += 5 + else: + complexity = "O(n²) or worst" + score += 0 + + self.result += ('\n|-\n| %s \n| %s \n| %s \n| %s \n| %s \n| %s ') % (obj, size, base_time, halfsize_time, size_time, complexity) + else: + score += -5 + self.result += ('\n|-\n| %s \n| %s \n| %s \n| %s \n| %s \n| %s ') % (obj, size, "", "", "", "Warning! Object has no demo data") + + + self.result += '\n|}' + self.score = obj_counter and score/obj_counter or 0.0 return None # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
