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 { ...@@ -57,13 +57,15 @@ Coverage.CoverageModel = class extends SDK.SDKModel {
/** /**
* @return {!Promise<!Array<!Coverage.CoverageInfo>>} * @return {!Promise<!Array<!Coverage.CoverageInfo>>}
*/ */
stop() { async stop() {
const pollPromise = this.poll(); const result = await this.poll();
const promises = [];
if (this._cpuProfilerModel) if (this._cpuProfilerModel)
this._cpuProfilerModel.stopPreciseCoverage(); promises.push(this._cpuProfilerModel.stopPreciseCoverage());
if (this._cssModel) if (this._cssModel)
this._cssModel.stopCoverage(); promises.push(this._cssModel.stopCoverage());
return pollPromise; await Promise.all(promises);
return result;
} }
reset() { reset() {
......
...@@ -200,29 +200,25 @@ SDK.Target = class extends Protocol.TargetBase { ...@@ -200,29 +200,25 @@ SDK.Target = class extends Protocol.TargetBase {
/** /**
* @return {!Promise} * @return {!Promise}
*/ */
suspend() { async suspend() {
if (this._isSuspended) if (this._isSuspended)
return Promise.resolve(); return Promise.resolve();
this._isSuspended = true; this._isSuspended = true;
const promises = []; await Promise.all(Array.from(this.models().values(), m => m.preSuspendModel()));
for (const model of this.models().values()) await Promise.all(Array.from(this.models().values(), m => m.suspendModel()));
promises.push(model.suspendModel());
return Promise.all(promises);
} }
/** /**
* @return {!Promise} * @return {!Promise}
*/ */
resume() { async resume() {
if (!this._isSuspended) if (!this._isSuspended)
return Promise.resolve(); return Promise.resolve();
this._isSuspended = false; this._isSuspended = false;
const promises = []; await Promise.all(Array.from(this.models().values(), m => m.resumeModel()));
for (const model of this.models().values()) await Promise.all(Array.from(this.models().values(), m => m.postResumeModel()));
promises.push(model.resumeModel());
return Promise.all(promises);
} }
/** /**
...@@ -286,6 +282,15 @@ SDK.SDKModel = class extends Common.Object { ...@@ -286,6 +282,15 @@ SDK.SDKModel = class extends Common.Object {
return this._target; 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} * @return {!Promise}
*/ */
...@@ -300,6 +305,15 @@ SDK.SDKModel = class extends Common.Object { ...@@ -300,6 +305,15 @@ SDK.SDKModel = class extends Common.Object {
return Promise.resolve(); 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() { dispose() {
} }
}; };
......
...@@ -30,11 +30,11 @@ ...@@ -30,11 +30,11 @@
ApplicationTestRunner.waitForServiceWorker(step1); ApplicationTestRunner.waitForServiceWorker(step1);
ApplicationTestRunner.registerServiceWorker(scriptURL, scope); ApplicationTestRunner.registerServiceWorker(scriptURL, scope);
function step1(target) { async function step1(target) {
TestRunner.addResult('Suspending targets.'); TestRunner.addResult('Suspending targets.');
SDK.targetManager.suspendAllTargets(); await SDK.targetManager.suspendAllTargets();
TestRunner.addResult('Resuming targets.'); TestRunner.addResult('Resuming targets.');
SDK.targetManager.resumeAllTargets(); await SDK.targetManager.resumeAllTargets();
TestRunner.completeTest(); 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