From kde-kimageshop Fri Dec 24 04:00:40 2010 From: Geoffry Song Date: Fri, 24 Dec 2010 04:00:40 +0000 To: kde-kimageshop Subject: [patch] on the performance of KisCircleMaskGenerator::valueAt Message-Id: X-MARC-Message: https://marc.info/?l=kde-kimageshop&m=129316328907119 MIME-Version: 1 Content-Type: multipart/mixed; boundary="--001636c5ad09c4ec3b04982008a1" --001636c5ad09c4ec3b04982008a1 Content-Type: text/plain; charset=UTF-8 I noticed that KisCircleMaskGenerator::valueAt(), which can easily be called millions of times in a single stroke, has some rather inefficient code (in particular, an unnecessary sqrt()), so I took the liberty of optimizing the code a bit. This patch should somewhat improve the performance of large brushes, especially the sketch brush with a large diameter. No, it is not a large difference. On my machine, the old code took about 26 nanoseconds per call, and the new code takes 15 nanoseconds per call. (Raw data: old code, time per call: 2.6188e-08, 2.6148e-08, 2.612e-08, 2.6688e-08, 2.668e-08, 2.6868e-08. New code: 1.4952e-08, 1.5532e-08, 1.4972e-08, 1.4964e-08, 1.4892e-08, 1.4868e-08, 1.4876e-08, 1.5144e-08, 1.4872e-08, 1.4872e-08, 1.4876e-08. Each sample is an average over 2.5 billion calls) -- Segmentation fault --001636c5ad09c4ec3b04982008a1 Content-Type: application/octet-stream; name="0001-KisCircleMaskGenerator-valueAt-optimize-arithmetic.patch" Content-Disposition: attachment; filename="0001-KisCircleMaskGenerator-valueAt-optimize-arithmetic.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gi2js0on0 RnJvbSBlODYxMDFjZGQ4NGQ2NjQzNTgyMTdiZThhZGNiNDJhMDljYmI0YjE4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHZW9mZnJ5IFNvbmcgPGdvZmZyaWVAZ21haWwuY29tPgpEYXRl OiBUaHUsIDIzIERlYyAyMDEwIDE4OjEwOjM4IC0wNTAwClN1YmplY3Q6IFtQQVRDSF0gS2lzQ2ly Y2xlTWFza0dlbmVyYXRvcjo6dmFsdWVBdCgpOiBvcHRpbWl6ZSBhcml0aG1ldGljCgotLS0KIGty aXRhL2ltYWdlL2tpc19jaXJjbGVfbWFza19nZW5lcmF0b3IuY3BwIHwgICAyOCArKysrKysrKysr KysrKystLS0tLS0tLS0tLS0tCiAxIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDEz IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2tyaXRhL2ltYWdlL2tpc19jaXJjbGVfbWFza19n ZW5lcmF0b3IuY3BwIGIva3JpdGEvaW1hZ2Uva2lzX2NpcmNsZV9tYXNrX2dlbmVyYXRvci5jcHAK aW5kZXggMmJjYWZlZS4uNTg1MDg4ZSAxMDA2NDQKLS0tIGEva3JpdGEvaW1hZ2Uva2lzX2NpcmNs ZV9tYXNrX2dlbmVyYXRvci5jcHAKKysrIGIva3JpdGEvaW1hZ2Uva2lzX2NpcmNsZV9tYXNrX2dl bmVyYXRvci5jcHAKQEAgLTcxLDI2ICs3MSwyOCBAQCBxdWludDggS2lzQ2lyY2xlTWFza0dlbmVy YXRvcjo6dmFsdWVBdChxcmVhbCB4LCBxcmVhbCB5KSBjb25zdAogICAgIH0gZWxzZSB7CiAgICAg ICAgIHFyZWFsIHRyYW5zZm9ybWVkRmFkZVggPSBkLT54ZmFkZWNvZWYgKiBzb2Z0bmVzcygpOwog ICAgICAgICBxcmVhbCB0cmFuc2Zvcm1lZEZhZGVZID0gZC0+eWZhZGVjb2VmICogc29mdG5lc3Mo KTsKKyAgICAgICAgcXJlYWwgdHJhbnNmb3JtZWRGYWRlWFNxdWFyZWQgPSB0cmFuc2Zvcm1lZEZh ZGVYICogdHJhbnNmb3JtZWRGYWRlWDsKKyAgICAgICAgcXJlYWwgdHJhbnNmb3JtZWRGYWRlWVNx dWFyZWQgPSB0cmFuc2Zvcm1lZEZhZGVZICogdHJhbnNmb3JtZWRGYWRlWTsKICAgICAgICAgCi0g ICAgICAgIGRvdWJsZSBub3JtZUZhZGUgPSBub3JtZSh4ciAqIHRyYW5zZm9ybWVkRmFkZVgsIHly ICogdHJhbnNmb3JtZWRGYWRlWSk7CisgICAgICAgIGRvdWJsZSB4clNxdWFyZWQgPSB4ciAqIHhy OworICAgICAgICBkb3VibGUgeXJTcXVhcmVkID0geXIgKiB5cjsKKyAgICAgICAgZG91YmxlIG5v cm1lRmFkZSA9IHhyU3F1YXJlZCAqIHRyYW5zZm9ybWVkRmFkZVhTcXVhcmVkICsgeXJTcXVhcmVk ICogdHJhbnNmb3JtZWRGYWRlWVNxdWFyZWQ7CiAgICAgICAgIGlmIChub3JtZUZhZGUgPiAxKSB7 Ci0gICAgICAgICAgICBkb3VibGUgeGxlLCB5bGU7CiAgICAgICAgICAgICAvLyB4bGUgc3RhbmRz IGZvciB4LWNvb3JkaW5hdGUgbGltaXQgZXh0ZXJpb3IKICAgICAgICAgICAgIC8vIHlsZSBzdGFu ZHMgZm9yIHktY29vcmRpbmF0ZSBsaW1pdCBleHRlcmlvcgogICAgICAgICAgICAgLy8gd2UgYXJl IGNvbXB1dGluZyB0aGUgY29vcmRpbmF0ZSBvbiB0aGUgZXh0ZXJuYWwgZWxsaXBzZSBpbiBvcmRl ciB0byBjb21wdXRlCiAgICAgICAgICAgICAvLyB0aGUgZmFkZSB2YWx1ZQotICAgICAgICAgICAg aWYgKHhyID09IDApIHsKLSAgICAgICAgICAgICAgICB4bGUgPSAwOwotICAgICAgICAgICAgICAg IHlsZSA9IHlyID4gMCA/IDEgLyBkLT55Y29lZiA6IC0xIC8gZC0+eWNvZWY7Ci0gICAgICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRvdWJsZSBjID0geXIgLyAoZG91YmxlKXhyOwot ICAgICAgICAgICAgICAgIHhsZSA9IHNxcnQoMSAvIG5vcm1lKGQtPnhjb2VmLCBjICogZC0+eWNv ZWYpKTsKLSAgICAgICAgICAgICAgICB4bGUgPSB4ciA+IDAgPyB4bGUgOiAteGxlOwotICAgICAg ICAgICAgICAgIHlsZSA9IHhsZSAqIGM7Ci0gICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v IHhsZSA9IHhyIC8gc3FydChub3JtZSh4ciAqIGQtPnhjb2VmLCB5ciAqIGQtPnljb2VmKSkKKyAg ICAgICAgICAgIC8vIHlsZSA9IHlyIC8gc3FydChub3JtZSh4ciAqIGQtPnhjb2VmLCB5ciAqIGQt Pnljb2VmKSkKKwogICAgICAgICAgICAgLy8gT24gdGhlIGludGVybmFsIGxpbWl0IG9mIHRoZSBm YWRlIGFyZWEsIG5vcm1lRmFkZSBpcyBlcXVhbCB0byAxCi0gICAgICAgICAgICBkb3VibGUgbm9y bWVGYWRlTGltaXRFID0gbm9ybWUoeGxlICogdHJhbnNmb3JtZWRGYWRlWCwgeWxlICogdHJhbnNm b3JtZWRGYWRlWSk7Ci0gICAgICAgICAgICByZXR1cm4gKHVjaGFyKSgyNTUgKihub3JtZUZhZGUg LSAxKSAvIChub3JtZUZhZGVMaW1pdEUgLSAxKSk7CisKKyAgICAgICAgICAgIC8vIG5vcm1lRmFk ZUxpbWl0RSA9IG5vcm1lKHhsZSAqIHRyYW5zZm9ybWVkRmFkZVgsIHlsZSAqIHRyYW5zZm9ybWVk RmFkZVkpCisgICAgICAgICAgICAvLyByZXR1cm4gKHVjaGFyKSgyNTUgKihub3JtZUZhZGUgLSAx KSAvIChub3JtZUZhZGVMaW1pdEUgLSAxKSk7CisKKyAgICAgICAgICAgIHJldHVybiAodWNoYXIp KDI1NSAqIG4gKiAobm9ybWVGYWRlIC0gMSkgLyAobm9ybWVGYWRlIC0gbikpOworICAgICAgICAg ICAgLy8gaWYgbiA9PSAwLCB0aGUgY29udmVyc2lvbiBvZiBOYU4gdG8gdWNoYXIgd2lsbCBjb3Jy ZWN0bHkgcmVzdWx0IGluIHplcm8KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG4gPSAx IC0gbjsKICAgICAgICAgICAgIGlmKCB3aWR0aCgpIDwgMiB8fCBoZWlnaHQoKSA8IDIgfHwgbiA+ IGQtPnhjb2VmICogMC41IHx8IG4gPiBkLT55Y29lZiAqIDAuNSkKLS0gCjEuNy4zLjQKCg== --001636c5ad09c4ec3b04982008a1 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ kimageshop mailing list kimageshop@kde.org https://mail.kde.org/mailman/listinfo/kimageshop --001636c5ad09c4ec3b04982008a1--