diff options
| author | Aaron Bohy <aab@odoo.com> | 2020-07-10 16:54:22 +0000 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2020-07-16 07:03:05 +0000 |
| commit | 12cc5fd0ccd7ae2981d07a59d5ccc6451b3d0d52 (patch) | |
| tree | 8f6da61d301c1a1c6caa66a2313831cf0af494cb /addons/web/static/tests/views/form_benchmarks.js | |
| parent | 6f47bfd91677a2ad58e11d67418cc76ab566609c (diff) | |
[IMP] web: benchmark: revive benchmark suite
The benchmark suite has been broken for a while, by several
refactorings (e.g. use of native Promise). This commit makes it
work again. We do not use it much, but maybe we should as it can
be useful to track changes (mostly in view renderers) that impact
performances.
Diffstat (limited to 'addons/web/static/tests/views/form_benchmarks.js')
| -rw-r--r-- | addons/web/static/tests/views/form_benchmarks.js | 168 |
1 files changed, 86 insertions, 82 deletions
diff --git a/addons/web/static/tests/views/form_benchmarks.js b/addons/web/static/tests/views/form_benchmarks.js index efd12741d66..b65e8a4ccce 100644 --- a/addons/web/static/tests/views/form_benchmarks.js +++ b/addons/web/static/tests/views/form_benchmarks.js @@ -1,94 +1,98 @@ odoo.define('web.form_benchmarks', function (require) { -"use strict"; + "use strict"; -var FormView = require('web.FormView'); -var testUtils = require('web.test_utils'); + const FormView = require('web.FormView'); + const testUtils = require('web.test_utils'); -var createView = testUtils.createView; + const { createView } = testUtils; -QUnit.module('Form View', { - beforeEach: function () { - this.data = { - foo: { - fields: { - many2many: { string: "bar", type: "many2many", relation: 'bar'}, + QUnit.module('Form View', { + beforeEach: function () { + this.data = { + foo: { + fields: { + foo: {string: "Foo", type: "char"}, + many2many: { string: "bar", type: "many2many", relation: 'bar'}, + }, + records: [ + { id: 1, foo: "bar", many2many: []}, + ], + onchanges: {} }, - records: [ - { id: 1, many2many: []}, - ], - onchanges: {} - }, - bar: { - fields: { - char: {string: "char", type: "char"}, - many2many: { string: "pokemon", type: "many2many", relation: 'pokemon'}, + bar: { + fields: { + char: {string: "char", type: "char"}, + many2many: { string: "pokemon", type: "many2many", relation: 'pokemon'}, + }, + records: [], + onchanges: {} }, - records: [], - onchanges: {} - }, - pokemon: { - fields: { - name: {string: "Name", type: "char"}, + pokemon: { + fields: { + name: {string: "Name", type: "char"}, + }, + records: [], + onchanges: {} }, - records: [], - onchanges: {} - }, - }; - this.arch = null; - this.run = function (assert, done, cb) { - var data = this.data; - var arch = this.arch; - new Benchmark.Suite({}) - .add('form', function () { - var list = createView({ - View: FormView, - model: 'foo', - data: data, - arch: arch, - res_id: 1, - }); - if (cb) { - cb(list); - } - list.destroy(); - }) - .on('cycle', function(event) { - assert.ok(true, String(event.target)); - }) - .on('complete', done) - .run({ 'async': true }); - }; - } -}, function () { - QUnit.test('x2many with 250 rows, 2 fields (with many2many_tags, and modifiers), onchanges, and edition', function (assert) { - var done = assert.async(); - assert.expect(1); + }; + this.arch = null; + this.run = function (assert, viewParams, cb) { + const data = this.data; + const arch = this.arch; + return new Promise(resolve => { + new Benchmark.Suite({}) + .add('form', { + defer: true, + fn: async (deferred) => { + const form = await createView(Object.assign({ + View: FormView, + model: 'foo', + data, + arch, + }, viewParams)); + if (cb) { + await cb(form); + } + form.destroy(); + deferred.resolve(); + }, + }) + .on('cycle', event => { + assert.ok(true, String(event.target)); + }) + .on('complete', resolve) + .run({ async: true }); + }); + }; + } + }, function () { + QUnit.test('x2many with 250 rows, 2 fields (with many2many_tags, and modifiers), onchanges, and edition', function (assert) { + assert.expect(1); - this.data.foo.onchanges.many2many = function (obj) { - obj.many2many = [5].concat(obj.many2many); - }; - for (var i = 2; i < 500; i) { - this.data.bar.records.push({ - id: i, - char: "automated data", + this.data.foo.onchanges.many2many = function (obj) { + obj.many2many = [5].concat(obj.many2many); + }; + for (let i = 2; i < 500; i++) { + this.data.bar.records.push({ + id: i, + char: "automated data", + }); + this.data.foo.records[0].many2many.push(i); + } + this.arch = ` + <form> + <field name="many2many"> + <tree editable="top" limit="250"> + <field name="char"/> + <field name="many2many" widget="many2many_tags" attrs="{'readonly': [('char', '==', 'toto')]}"/> + </tree> + </field> + </form>`; + return this.run(assert, { res_id: 1 }, async form => { + await testUtils.form.clickEdit(form); + await testUtils.dom.click(form.$('.o_data_cell:first')); + await testUtils.fields.editInput(form.$('input:first'), "tralala"); }); - this.data.foo.records[0].many2many.push(i); - } - this.arch = - '<form string="Partners">' + - '<field name="many2many">' + - '<tree editable="top" limit="250">' + - '<field name="char"/>' + - '<field name="many2many" widget="many2many_tags" attrs="{\'readonly\': [(\'char\', \'==\', \'toto\')]}"/>' + - '</tree>' + - '</field>' + - '</form>'; - this.run(assert, done, function (form) { - testUtils.form.clickEdit(form); - form.$('.o_data_cell:first').click(); - form.$('input:first').val("tralala").trigger('input'); }); }); }); - -});
\ No newline at end of file |
