gecko-dev/toolkit/components/glean/ipc/FOGIPC.h
Sebastian Hengst 9bc20993bc Backed out 3 changesets (bug 1790872) on request of nika for causing regressions. CLOSED TREE
Backed out changeset 6b72e6c8e3bc (bug 1790872)
Backed out changeset 3e53a1922022 (bug 1790872)
Backed out changeset 862b578d462e (bug 1790872)
2022-12-08 23:17:57 +01:00

102 lines
3.5 KiB
C++

/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef FOGIPC_h__
#define FOGIPC_h__
#include <functional>
#include "mozilla/Maybe.h"
#include "mozilla/MozPromise.h"
#include "nsTArrayForwardDeclare.h"
namespace mozilla {
namespace ipc {
class ByteBuf;
} // namespace ipc
} // namespace mozilla
// This module provides the interface for FOG to communicate between processes.
namespace mozilla {
namespace glean {
/**
* The parent process is asking you to flush your data ASAP.
*
* @param aResolver - The function you need to call with the bincoded,
* serialized payload that the Rust impl hands you.
*/
void FlushFOGData(std::function<void(ipc::ByteBuf&&)>&& aResolver);
/**
* Called by FOG on the parent process when it wants to flush all its
* children's data.
* @param aResolver - The function that'll be called with the results.
*/
void FlushAllChildData(
std::function<void(nsTArray<ipc::ByteBuf>&&)>&& aResolver);
/**
* A child process has sent you this buf as a treat.
* @param buf - a bincoded serialized payload that the Rust impl understands.
*/
void FOGData(ipc::ByteBuf&& buf);
/**
* Called by FOG on a child process when it wants to send a buf to the parent.
* @param buf - a bincoded serialized payload that the Rust impl understands.
*/
void SendFOGData(ipc::ByteBuf&& buf);
/**
* Called on the parent process to ask all child processes for data,
* sending it all down into Rust to be used.
*
* @returns a Promise that resolves when the data has made it to the parent.
*/
RefPtr<GenericPromise> FlushAndUseFOGData();
/**
* ** Test-only Method **
*
* Trigger GMP, GPU, RDD or Socket process test instrumentation.
*
* @param processType - one of the PROCESS_TYPE_* constants from nsIXULRuntime.
* @param promise - a promise that will be resolved when the data has made it to
* the target process.
*/
void TestTriggerMetrics(uint32_t processType,
const RefPtr<dom::Promise>& promise);
#ifdef NIGHTLY_BUILD
/**
* This function records the CPU activity (CPU time used and wakeup count)
* of a specific thread. It is called only by profiler code, either multiple
* times in a row when RecordPowerMetrics asks the profiler to record
* the wakeup counts of all threads, or once when a thread is unregistered.
*
* @param aThreadName The name of the thread for which the CPU data is being
* recorded.
* The name will be converted to lower case, and characters
* that are not valid for glean labels will be replaced with
* '_'. The resulting name should be part of the
* per_thread_labels static list of labels defined in
* toolkit/components/processtools/metrics.yaml.
* @param aCpuTimeMs CPU time in miliseconds since the last time CPU use data
* was recorded for this thread.
* @param aWakeCount How many times the thread woke up since the previous time
* CPU use data was recorded for this thread.
*/
void RecordThreadCpuUse(const nsACString& aThreadName, uint64_t aCpuTimeMs,
uint64_t aWakeCount);
#endif
void RecordPowerMetrics();
} // namespace glean
} // namespace mozilla
#endif // FOGIPC_h__