Line data Source code
1 : /* 2 : * Famedly Matrix SDK 3 : * Copyright (C) 2019, 2020 Famedly GmbH 4 : * 5 : * This program is free software: you can redistribute it and/or modify 6 : * it under the terms of the GNU Affero General Public License as 7 : * published by the Free Software Foundation, either version 3 of the 8 : * License, or (at your option) any later version. 9 : * 10 : * This program is distributed in the hope that it will be useful, 11 : * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 : * GNU Affero General Public License for more details. 14 : * 15 : * You should have received a copy of the GNU Affero General Public License 16 : * along with this program. If not, see <https://www.gnu.org/licenses/>. 17 : */ 18 : 19 : import 'package:matrix/matrix.dart'; 20 : 21 : /// Calculates some benchmarks for this function. Give it a [name] and a [func] 22 : /// to call and it will calculate the needed milliseconds. Give it an optional 23 : /// [itemCount] to let it also calculate the needed milliseconds per item. 24 31 : Future<T> runBenchmarked<T>( 25 : String name, 26 : Future<T> Function() func, [ 27 : int? itemCount, 28 : ]) async { 29 155 : if (Logs().level.index < Level.debug.index) { 30 1 : return func(); 31 : } 32 30 : final start = DateTime.now(); 33 30 : final result = await func(); 34 : final milliseconds = 35 120 : DateTime.now().millisecondsSinceEpoch - start.millisecondsSinceEpoch; 36 30 : var message = 'Benchmark: $name -> $milliseconds ms'; 37 : if (itemCount != null) { 38 30 : message += 39 90 : ' ($itemCount items, ${itemCount > 0 ? milliseconds / itemCount : milliseconds} ms/item)'; 40 : } 41 60 : Logs().d(message); 42 : return result; 43 : }