summaryrefslogtreecommitdiff
path: root/addons/base_module_quality/speed_test
diff options
context:
space:
mode:
authorqdp <qdp@tinyerp.com>2008-12-23 16:58:47 +0100
committerqdp <qdp@tinyerp.com>2008-12-23 16:58:47 +0100
commitcd6b3e1941b30ae93d41ff64df04ae8df1ce1f90 (patch)
treef039a7341cc366da7321d79394a2430e4e38e584 /addons/base_module_quality/speed_test
parent5daa2f6a58fddaef074b1ab226264f727cfd43d2 (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.py78
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: