Bug 1668867 - PProfiler control functions return a completion promise - r=canaltinova

The returned promise is resolved when the child has completed its operation.

Differential Revision: https://phabricator.services.mozilla.com/D139332
This commit is contained in:
Gerald Squelart 2022-03-01 06:56:01 +00:00
Родитель 2fa78ca017
Коммит 4d50543faa
3 изменённых файлов: 35 добавлений и 21 удалений

Просмотреть файл

@ -18,13 +18,14 @@ namespace mozilla {
async protocol PProfiler
{
child:
async Start(ProfilerInitParams params);
async EnsureStarted(ProfilerInitParams params);
async Stop();
async Pause();
async Resume();
async PauseSampling();
async ResumeSampling();
// The unused returned value is to have a promise we can await.
async Start(ProfilerInitParams params) returns (bool unused);
async EnsureStarted(ProfilerInitParams params) returns (bool unused);
async Stop() returns (bool unused);
async Pause() returns (bool unused);
async Resume() returns (bool unused);
async PauseSampling() returns (bool unused);
async ResumeSampling() returns (bool unused);
async AwaitNextChunkManagerUpdate() returns (ProfileBufferChunkManagerUpdate update);
async DestroyReleasedChunksAtOrBefore(TimeStamp timeStamp);

Просмотреть файл

@ -156,7 +156,7 @@ void ProfilerChild::ResetChunkManager() {
}
mozilla::ipc::IPCResult ProfilerChild::RecvStart(
const ProfilerInitParams& params) {
const ProfilerInitParams& params, StartResolver&& aResolve) {
nsTArray<const char*> filterArray;
for (size_t i = 0; i < params.filters().Length(); ++i) {
filterArray.AppendElement(params.filters()[i].get());
@ -168,11 +168,12 @@ mozilla::ipc::IPCResult ProfilerChild::RecvStart(
SetupChunkManager();
aResolve(/* unused */ true);
return IPC_OK();
}
mozilla::ipc::IPCResult ProfilerChild::RecvEnsureStarted(
const ProfilerInitParams& params) {
const ProfilerInitParams& params, EnsureStartedResolver&& aResolve) {
nsTArray<const char*> filterArray;
for (size_t i = 0; i < params.filters().Length(); ++i) {
filterArray.AppendElement(params.filters()[i].get());
@ -185,32 +186,40 @@ mozilla::ipc::IPCResult ProfilerChild::RecvEnsureStarted(
SetupChunkManager();
aResolve(/* unused */ true);
return IPC_OK();
}
mozilla::ipc::IPCResult ProfilerChild::RecvStop() {
mozilla::ipc::IPCResult ProfilerChild::RecvStop(StopResolver&& aResolve) {
ResetChunkManager();
profiler_stop();
aResolve(/* unused */ true);
return IPC_OK();
}
mozilla::ipc::IPCResult ProfilerChild::RecvPause() {
mozilla::ipc::IPCResult ProfilerChild::RecvPause(PauseResolver&& aResolve) {
profiler_pause();
aResolve(/* unused */ true);
return IPC_OK();
}
mozilla::ipc::IPCResult ProfilerChild::RecvResume() {
mozilla::ipc::IPCResult ProfilerChild::RecvResume(ResumeResolver&& aResolve) {
profiler_resume();
aResolve(/* unused */ true);
return IPC_OK();
}
mozilla::ipc::IPCResult ProfilerChild::RecvPauseSampling() {
mozilla::ipc::IPCResult ProfilerChild::RecvPauseSampling(
PauseSamplingResolver&& aResolve) {
profiler_pause_sampling();
aResolve(/* unused */ true);
return IPC_OK();
}
mozilla::ipc::IPCResult ProfilerChild::RecvResumeSampling() {
mozilla::ipc::IPCResult ProfilerChild::RecvResumeSampling(
ResumeSamplingResolver&& aResolve) {
profiler_resume_sampling();
aResolve(/* unused */ true);
return IPC_OK();
}

Просмотреть файл

@ -45,14 +45,18 @@ class ProfilerChild final : public PProfilerChild,
private:
virtual ~ProfilerChild();
mozilla::ipc::IPCResult RecvStart(const ProfilerInitParams& params) override;
mozilla::ipc::IPCResult RecvStart(const ProfilerInitParams& params,
StartResolver&& aResolve) override;
mozilla::ipc::IPCResult RecvEnsureStarted(
const ProfilerInitParams& params) override;
mozilla::ipc::IPCResult RecvStop() override;
mozilla::ipc::IPCResult RecvPause() override;
mozilla::ipc::IPCResult RecvResume() override;
mozilla::ipc::IPCResult RecvPauseSampling() override;
mozilla::ipc::IPCResult RecvResumeSampling() override;
const ProfilerInitParams& params,
EnsureStartedResolver&& aResolve) override;
mozilla::ipc::IPCResult RecvStop(StopResolver&& aResolve) override;
mozilla::ipc::IPCResult RecvPause(PauseResolver&& aResolve) override;
mozilla::ipc::IPCResult RecvResume(ResumeResolver&& aResolve) override;
mozilla::ipc::IPCResult RecvPauseSampling(
PauseSamplingResolver&& aResolve) override;
mozilla::ipc::IPCResult RecvResumeSampling(
ResumeSamplingResolver&& aResolve) override;
mozilla::ipc::IPCResult RecvAwaitNextChunkManagerUpdate(
AwaitNextChunkManagerUpdateResolver&& aResolve) override;
mozilla::ipc::IPCResult RecvDestroyReleasedChunksAtOrBefore(