* Ends measuring.
(restart: boolean)
| 36 | * Ends measuring. |
| 37 | */ |
| 38 | override endMeasure(restart: boolean): Promise<{[key: string]: any}> { |
| 39 | let resolve: (result: any) => void; |
| 40 | let reject: (error: any) => void; |
| 41 | const promise = new Promise<{[key: string]: any}>((res, rej) => { |
| 42 | resolve = res; |
| 43 | reject = rej; |
| 44 | }); |
| 45 | const adapter = this._wdAdapter; |
| 46 | const names = Object.keys(this._userMetrics); |
| 47 | |
| 48 | function getAndClearValues() { |
| 49 | Promise.all(names.map((name) => adapter.executeScript(`return window.${name}`))).then( |
| 50 | (values: any[]) => { |
| 51 | if (values.every((v) => typeof v === 'number')) { |
| 52 | Promise.all(names.map((name) => adapter.executeScript(`delete window.${name}`))).then( |
| 53 | (_: any[]) => { |
| 54 | const map: {[k: string]: any} = {}; |
| 55 | for (let i = 0, n = names.length; i < n; i++) { |
| 56 | map[names[i]] = values[i]; |
| 57 | } |
| 58 | resolve(map); |
| 59 | }, |
| 60 | reject, |
| 61 | ); |
| 62 | } else { |
| 63 | <any>setTimeout(getAndClearValues, 100); |
| 64 | } |
| 65 | }, |
| 66 | reject, |
| 67 | ); |
| 68 | } |
| 69 | getAndClearValues(); |
| 70 | return promise; |
| 71 | } |
| 72 | |
| 73 | /** |
| 74 | * Describes the metrics provided by this metric implementation. |