From 35e6d10517d0a9c506264580f4f6444591d455d9 Mon Sep 17 00:00:00 2001 From: Pavel Feldman Date: Wed, 20 Nov 2019 09:28:22 -0800 Subject: [PATCH] chore: remove page.metrics API (#30) --- docs/api.md | 33 ++------------------------- src/Events.ts | 1 - src/chromium/Page.ts | 54 -------------------------------------------- test/input.spec.js | 5 +--- test/page.spec.js | 38 ------------------------------- 5 files changed, 3 insertions(+), 128 deletions(-) diff --git a/docs/api.md b/docs/api.md index 74116ee4db..3453af073c 100644 --- a/docs/api.md +++ b/docs/api.md @@ -71,7 +71,6 @@ * [event: 'framedetached'](#event-framedetached) * [event: 'framenavigated'](#event-framenavigated) * [event: 'load'](#event-load) - * [event: 'metrics'](#event-metrics) * [event: 'pageerror'](#event-pageerror) * [event: 'popup'](#event-popup) * [event: 'request'](#event-request) @@ -116,7 +115,6 @@ * [page.isClosed()](#pageisclosed) * [page.keyboard](#pagekeyboard) * [page.mainFrame()](#pagemainframe) - * [page.metrics()](#pagemetrics) * [page.mouse](#pagemouse) * [page.pdf](#pagepdf) * [page.queryObjects(prototypeHandle)](#pagequeryobjectsprototypehandle) @@ -1010,15 +1008,6 @@ Emitted when a frame is navigated to a new url. Emitted when the JavaScript [`load`](https://developer.mozilla.org/en-US/docs/Web/Events/load) event is dispatched. -#### event: 'metrics' -- <[Object]> - - `title` <[string]> The title passed to `console.timeStamp`. - - `metrics` <[Object]> Object containing metrics as key/value pairs. The values - of metrics are of <[number]> type. - -Emitted when the JavaScript code makes a call to `console.timeStamp`. For the list -of metrics see `page.metrics`. - #### event: 'pageerror' - <[Error]> The exception message @@ -1628,24 +1617,6 @@ Indicates that the page has been closed. Page is guaranteed to have a main frame which persists during navigations. -#### page.metrics() -- returns: <[Promise]<[Object]>> Object containing metrics as key/value pairs. - - `Timestamp` <[number]> The timestamp when the metrics sample was taken. - - `Documents` <[number]> Number of documents in the page. - - `Frames` <[number]> Number of frames in the page. - - `JSEventListeners` <[number]> Number of events in the page. - - `Nodes` <[number]> Number of DOM nodes in the page. - - `LayoutCount` <[number]> Total number of full or partial page layout. - - `RecalcStyleCount` <[number]> Total number of page style recalculations. - - `LayoutDuration` <[number]> Combined durations of all page layouts. - - `RecalcStyleDuration` <[number]> Combined duration of all page style recalculations. - - `ScriptDuration` <[number]> Combined duration of JavaScript execution. - - `TaskDuration` <[number]> Combined duration of all tasks performed by the browser. - - `JSHeapUsedSize` <[number]> Used JavaScript heap size. - - `JSHeapTotalSize` <[number]> Total JavaScript heap size. - -> **NOTE** All timestamps are in monotonic time: monotonically increasing time in seconds since an arbitrary point in the past. - #### page.mouse - returns: <[Mouse]> @@ -2179,8 +2150,8 @@ The Worker class represents a [WebWorker](https://developer.mozilla.org/en-US/do The events `workercreated` and `workerdestroyed` are emitted on the page object to signal the worker lifecycle. ```js -page.on('workercreated', worker => console.log('Worker created: ' + worker.url())); -page.on('workerdestroyed', worker => console.log('Worker destroyed: ' + worker.url())); +page.workers.on('workercreated', worker => console.log('Worker created: ' + worker.url())); +page.workers.on('workerdestroyed', worker => console.log('Worker destroyed: ' + worker.url())); console.log('Current workers:'); for (const worker of page.workers()) diff --git a/src/Events.ts b/src/Events.ts index d028e660cd..3f18497bc2 100644 --- a/src/Events.ts +++ b/src/Events.ts @@ -33,7 +33,6 @@ export const Events = { FrameDetached: 'framedetached', FrameNavigated: 'framenavigated', Load: 'load', - Metrics: 'metrics', Popup: 'popup', }, diff --git a/src/chromium/Page.ts b/src/chromium/Page.ts index 9e1af37636..91820a45c6 100644 --- a/src/chromium/Page.ts +++ b/src/chromium/Page.ts @@ -129,7 +129,6 @@ export class Page extends EventEmitter { client.on('Page.javascriptDialogOpening', event => this._onDialog(event)); client.on('Runtime.exceptionThrown', exception => this._handleException(exception.exceptionDetails)); client.on('Inspector.targetCrashed', event => this._onTargetCrashed()); - client.on('Performance.metrics', event => this._emitMetrics(event)); client.on('Log.entryAdded', event => this._onLogEntryAdded(event)); client.on('Page.fileChooserOpened', event => this._onFileChooser(event)); this._target._isClosedPromise.then(() => { @@ -356,27 +355,6 @@ export class Page extends EventEmitter { return this._frameManager.networkManager().setUserAgent(userAgent); } - async metrics(): Promise { - const response = await this._client.send('Performance.getMetrics'); - return this._buildMetricsObject(response.metrics); - } - - _emitMetrics(event: Protocol.Performance.metricsPayload) { - this.emit(Events.Page.Metrics, { - title: event.title, - metrics: this._buildMetricsObject(event.metrics) - }); - } - - _buildMetricsObject(metrics: Protocol.Performance.Metric[] | null): Metrics { - const result = {}; - for (const metric of metrics || []) { - if (supportedMetrics.has(metric.name)) - result[metric.name] = metric.value; - } - return result; - } - _handleException(exceptionDetails: Protocol.Runtime.ExceptionDetails) { const message = getExceptionMessage(exceptionDetails); const err = new Error(message); @@ -792,22 +770,6 @@ export class Page extends EventEmitter { } } -type Metrics = { - Timestamp?: number, - Documents?: number, - Frames?: number, - JSEventListeners?: number, - Nodes?: number, - LayoutCount?: number, - RecalcStyleCount?: number, - LayoutDuration?: number, - RecalcStyleDuration?: number, - ScriptDuration?: number, - TaskDuration?: number, - JSHeapUsedSize?: number, - JSHeapTotalSize?: number, -} - type ScreenshotOptions = { type?: string, path?: string, @@ -823,22 +785,6 @@ type MediaFeature = { value: string } -const supportedMetrics: Set = new Set([ - 'Timestamp', - 'Documents', - 'Frames', - 'JSEventListeners', - 'Nodes', - 'LayoutCount', - 'RecalcStyleCount', - 'LayoutDuration', - 'RecalcStyleDuration', - 'ScriptDuration', - 'TaskDuration', - 'JSHeapUsedSize', - 'JSHeapTotalSize', -]); - type NetworkCookie = { name: string, value: string, diff --git a/test/input.spec.js b/test/input.spec.js index 764dfb8c1f..834e9b5576 100644 --- a/test/input.spec.js +++ b/test/input.spec.js @@ -104,10 +104,7 @@ module.exports.addTests = function({testRunner, expect, playwright, FFOX, CHROME page.waitForFileChooser(), page.click('input'), ]); - await Promise.all([ - chooser.accept([FILE_TO_UPLOAD]), - new Promise(x => page.once('metrics', x)), - ]); + await chooser.accept([FILE_TO_UPLOAD]); expect(await page.$eval('input', input => input.files.length)).toBe(1); expect(await page.$eval('input', input => input.files[0].name)).toBe('file-to-upload.txt'); }); diff --git a/test/page.spec.js b/test/page.spec.js index 9245747af9..99af44e4c6 100644 --- a/test/page.spec.js +++ b/test/page.spec.js @@ -436,44 +436,6 @@ module.exports.addTests = function({testRunner, expect, headless, playwright, FF }); }); - describe.skip(FFOX || WEBKIT)('Page.metrics', function() { - it('should get metrics from a page', async({page, server}) => { - await page.goto('about:blank'); - const metrics = await page.metrics(); - checkMetrics(metrics); - }); - it('metrics event fired on console.timeStamp', async({page, server}) => { - const metricsPromise = new Promise(fulfill => page.once('metrics', fulfill)); - await page.evaluate(() => console.timeStamp('test42')); - const metrics = await metricsPromise; - expect(metrics.title).toBe('test42'); - checkMetrics(metrics.metrics); - }); - function checkMetrics(metrics) { - const metricsToCheck = new Set([ - 'Timestamp', - 'Documents', - 'Frames', - 'JSEventListeners', - 'Nodes', - 'LayoutCount', - 'RecalcStyleCount', - 'LayoutDuration', - 'RecalcStyleDuration', - 'ScriptDuration', - 'TaskDuration', - 'JSHeapUsedSize', - 'JSHeapTotalSize', - ]); - for (const name in metrics) { - expect(metricsToCheck.has(name)).toBeTruthy(); - expect(metrics[name]).toBeGreaterThanOrEqual(0); - metricsToCheck.delete(name); - } - expect(metricsToCheck.size).toBe(0); - } - }); - describe('Page.waitForRequest', function() { it('should work', async({page, server}) => { await page.goto(server.EMPTY_PAGE);