diff --git a/atom/browser/api/atom_api_content_tracing.cc b/atom/browser/api/atom_api_content_tracing.cc index 7de217beb1fe..d3a1d3327cbf 100644 --- a/atom/browser/api/atom_api_content_tracing.cc +++ b/atom/browser/api/atom_api_content_tracing.cc @@ -115,10 +115,25 @@ v8::Local StartTracing( return promise->GetHandle(); } -bool GetTraceBufferUsage( - const base::RepeatingCallback& callback) { - return TracingController::GetInstance()->GetTraceBufferUsage( - base::BindOnce(callback)); +void OnTraceBufferUsageAvailable(scoped_refptr promise, + float percent_full, + size_t approximate_count) { + mate::Dictionary dict = mate::Dictionary::CreateEmpty(promise->isolate()); + dict.Set("percentage", percent_full); + dict.Set("value", approximate_count); + + promise->Resolve(dict.GetHandle()); +} + +v8::Local GetTraceBufferUsage(v8::Isolate* isolate) { + scoped_refptr promise = new atom::util::Promise(isolate); + bool success = TracingController::GetInstance()->GetTraceBufferUsage( + base::BindOnce(&OnTraceBufferUsageAvailable, promise)); + + if (!success) + promise->RejectWithErrorMessage("Could not get trace buffer usage."); + + return promise->GetHandle(); } void Initialize(v8::Local exports, diff --git a/docs/api/breaking-changes.md b/docs/api/breaking-changes.md index 2191a4cd3cdd..6ef47f49a7e1 100644 --- a/docs/api/breaking-changes.md +++ b/docs/api/breaking-changes.md @@ -17,6 +17,19 @@ win.setMenu(null) win.removeMenu() ``` +## `contentTracing.getTraceBufferUsage()` + +```js +// Deprecated +contentTracing.getTraceBufferUsage((percentage, value) => { + // do something +}) +// Replace with +contentTracing.getTraceBufferUsage().then(infoObject => { + // infoObject has percentage and value fields +}) +``` + ## `electron.screen` in renderer process ```js diff --git a/docs/api/content-tracing.md b/docs/api/content-tracing.md index 5fb78ed6793f..1249067c2764 100644 --- a/docs/api/content-tracing.md +++ b/docs/api/content-tracing.md @@ -122,9 +122,19 @@ temporary file. ### `contentTracing.getTraceBufferUsage(callback)` * `callback` Function - * `value` Number - * `percentage` Number + * Object + * `value` Number + * `percentage` Number Get the maximum usage across processes of trace buffer as a percentage of the full state. When the TraceBufferUsage value is determined the `callback` is called. + +**[Deprecated Soon](promisification.md)** + +### `contentTracing.getTraceBufferUsage()` + +Returns `Promise` - Resolves with an object containing the `value` and `percentage` of trace buffer maximum usage + +Get the maximum usage across processes of trace buffer as a percentage of the +full state. diff --git a/docs/api/promisification.md b/docs/api/promisification.md index df12872a78e6..9b8a21793be9 100644 --- a/docs/api/promisification.md +++ b/docs/api/promisification.md @@ -9,7 +9,6 @@ When a majority of affected functions are migrated, this flag will be enabled by ### Candidate Functions - [app.importCertificate(options, callback)](https://github.com/electron/electron/blob/master/docs/api/app.md#importCertificate) -- [contentTracing.getTraceBufferUsage(callback)](https://github.com/electron/electron/blob/master/docs/api/content-tracing.md#getTraceBufferUsage) - [dialog.showOpenDialog([browserWindow, ]options[, callback])](https://github.com/electron/electron/blob/master/docs/api/dialog.md#showOpenDialog) - [dialog.showSaveDialog([browserWindow, ]options[, callback])](https://github.com/electron/electron/blob/master/docs/api/dialog.md#showSaveDialog) - [dialog.showMessageBox([browserWindow, ]options[, callback])](https://github.com/electron/electron/blob/master/docs/api/dialog.md#showMessageBox) @@ -40,6 +39,7 @@ When a majority of affected functions are migrated, this flag will be enabled by - [contentTracing.getCategories(callback)](https://github.com/electron/electron/blob/master/docs/api/content-tracing.md#getCategories) - [contentTracing.startRecording(options, callback)](https://github.com/electron/electron/blob/master/docs/api/content-tracing.md#startRecording) - [contentTracing.stopRecording(resultFilePath, callback)](https://github.com/electron/electron/blob/master/docs/api/content-tracing.md#stopRecording) +- [contentTracing.getTraceBufferUsage(callback)](https://github.com/electron/electron/blob/master/docs/api/content-tracing.md#getTraceBufferUsage) - [cookies.flushStore(callback)](https://github.com/electron/electron/blob/master/docs/api/cookies.md#flushStore) - [cookies.get(filter, callback)](https://github.com/electron/electron/blob/master/docs/api/cookies.md#get) - [cookies.remove(url, name, callback)](https://github.com/electron/electron/blob/master/docs/api/cookies.md#remove) diff --git a/lib/browser/api/content-tracing.js b/lib/browser/api/content-tracing.js index 132d53ea0163..e7b5033baa33 100644 --- a/lib/browser/api/content-tracing.js +++ b/lib/browser/api/content-tracing.js @@ -5,5 +5,6 @@ const contentTracing = process.atomBinding('content_tracing') contentTracing.getCategories = deprecate.promisify(contentTracing.getCategories) contentTracing.startRecording = deprecate.promisify(contentTracing.startRecording) contentTracing.stopRecording = deprecate.promisify(contentTracing.stopRecording) +contentTracing.getTraceBufferUsage = deprecate.promisifyMultiArg(contentTracing.getTraceBufferUsage) module.exports = contentTracing diff --git a/lib/common/api/deprecate.js b/lib/common/api/deprecate.js index db28d25ffa13..06c5f89b4016 100644 --- a/lib/common/api/deprecate.js +++ b/lib/common/api/deprecate.js @@ -104,6 +104,32 @@ const deprecate = { } }, + promisifyMultiArg: (fn) => { + const fnName = fn.name || 'function' + const oldName = `${fnName} with callbacks` + const newName = `${fnName} with Promises` + const warn = warnOnce(oldName, newName) + + return function (...params) { + let cb + if (params.length > 0 && typeof params[params.length - 1] === 'function') { + cb = params.pop() + } + const promise = fn.apply(this, params) + if (!cb) return promise + if (process.enablePromiseAPIs) warn() + return promise + .then(res => { + process.nextTick(() => { + // eslint-disable-next-line standard/no-callback-literal + cb.length > 2 ? cb(null, ...res) : cb(...res) + }) + }, err => { + process.nextTick(() => cb(err)) + }) + } + }, + renameProperty: (o, oldName, newName) => { const warn = warnOnce(oldName, newName)