Commit fcf0fdd9 authored by Sigurd Schneider's avatar Sigurd Schneider Committed by Commit Bot

[devtools] Support preSuspendModel and postResumeModel hooks

This CL is a preparation for an upcoming CL, in which CoverageModel
starts supporting suspendModel/resumeModel. CoverageModel needs to
perform actions that still/already require the other models to be
suspended/resumed, so this will make use of the new hooks.

Drive-by: Don't start shutting down models while still polling
          data from them.

Bug: chromium:1000155, chromium:1002427
Change-Id: I98f318daa909b129d992bdc142d1b3a6ed0adefd
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1795442
Commit-Queue: Sigurd Schneider <sigurds@chromium.org>
Reviewed-by: default avatarAlexei Filippov <alph@chromium.org>
Cr-Commit-Position: refs/heads/master@{#697546}
parent 4fa4b613
......@@ -57,13 +57,15 @@ Coverage.CoverageModel = class extends SDK.SDKModel {
/**
* @return {!Promise<!Array<!Coverage.CoverageInfo>>}
*/
stop() {
const pollPromise = this.poll();
async stop() {
const result = await this.poll();
const promises = [];
if (this._cpuProfilerModel)
this._cpuProfilerModel.stopPreciseCoverage();
promises.push(this._cpuProfilerModel.stopPreciseCoverage());
if (this._cssModel)
this._cssModel.stopCoverage();
return pollPromise;
promises.push(this._cssModel.stopCoverage());
await Promise.all(promises);
return result;
}
reset() {
......
......@@ -200,29 +200,25 @@ SDK.Target = class extends Protocol.TargetBase {
/**
* @return {!Promise}
*/
suspend() {
async suspend() {
if (this._isSuspended)
return Promise.resolve();
this._isSuspended = true;
const promises = [];
for (const model of this.models().values())
promises.push(model.suspendModel());
return Promise.all(promises);
await Promise.all(Array.from(this.models().values(), m => m.preSuspendModel()));
await Promise.all(Array.from(this.models().values(), m => m.suspendModel()));
}
/**
* @return {!Promise}
*/
resume() {
async resume() {
if (!this._isSuspended)
return Promise.resolve();
this._isSuspended = false;
const promises = [];
for (const model of this.models().values())
promises.push(model.resumeModel());
return Promise.all(promises);
await Promise.all(Array.from(this.models().values(), m => m.resumeModel()));
await Promise.all(Array.from(this.models().values(), m => m.postResumeModel()));
}
/**
......@@ -286,6 +282,15 @@ SDK.SDKModel = class extends Common.Object {
return this._target;
}
/**
* Override this method to perform tasks that are required to suspend the
* model and that still need other models in an unsuspended state.
* @return {!Promise}
*/
preSuspendModel() {
return Promise.resolve();
}
/**
* @return {!Promise}
*/
......@@ -300,6 +305,15 @@ SDK.SDKModel = class extends Common.Object {
return Promise.resolve();
}
/**
* Override this method to perform tasks that are required to after resuming
* the model and that require all models already in an unsuspended state.
* @return {!Promise}
*/
postResumeModel() {
return Promise.resolve();
}
dispose() {
}
};
......
......@@ -30,11 +30,11 @@
ApplicationTestRunner.waitForServiceWorker(step1);
ApplicationTestRunner.registerServiceWorker(scriptURL, scope);
function step1(target) {
async function step1(target) {
TestRunner.addResult('Suspending targets.');
SDK.targetManager.suspendAllTargets();
await SDK.targetManager.suspendAllTargets();
TestRunner.addResult('Resuming targets.');
SDK.targetManager.resumeAllTargets();
await SDK.targetManager.resumeAllTargets();
TestRunner.completeTest();
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment