#include "services/resource_coordinator/memory_instrumentation/queued_request_dispatcher.h"
#include <inttypes.h>
#include <string_view>
#include <utility>
#include "base/command_line.h"
#include "base/containers/contains.h"
#include "base/format_macros.h"
#include "base/functional/bind.h"
#include "base/logging.h"
#include "base/metrics/histogram_macros.h"
#include "base/strings/strcat.h"
#include "base/strings/stringprintf.h"
#include "base/trace_event/trace_event.h"
#include "base/trace_event/traced_value.h"
#include "build/build_config.h"
#include "services/resource_coordinator/memory_instrumentation/aggregate_metrics_processor.h"
#include "services/resource_coordinator/memory_instrumentation/memory_dump_map_converter.h"
#include "services/resource_coordinator/memory_instrumentation/switches.h"
#include "services/resource_coordinator/public/cpp/memory_instrumentation/global_memory_dump.h"
#include "services/resource_coordinator/public/cpp/memory_instrumentation/tracing_observer_proto.h"
#include "third_party/perfetto/include/perfetto/ext/trace_processor/importers/memory_tracker/graph_processor.h"
#include "third_party/perfetto/protos/perfetto/trace/memory_graph.pbzero.h"
#include "third_party/perfetto/protos/perfetto/trace/trace_packet.pbzero.h"
#if BUILDFLAG(IS_MAC)
#include "base/mac/mac_util.h"
#endif
TracedValue;
GlobalNodeGraph;
LevelOfDetail;
RawMemoryGraphNode;
Node;
GraphProcessor;
namespace memory_instrumentation {
namespace {
uint32_t CalculatePrivateFootprintKb(const mojom::RawOSMemDump& os_dump,
uint32_t shared_resident_kb) { … }
memory_instrumentation::mojom::OSMemDumpPtr CreatePublicOSDump(
const mojom::RawOSMemDump& internal_os_dump,
uint32_t shared_resident_kb) { … }
void NodeAsValueIntoRecursively(const GlobalNodeGraph::Node& node,
TracedValue* value,
std::vector<std::string_view>* path) { … }
mojom::AllocatorMemDumpPtr CreateAllocatorDumpForNode(const Node* node,
bool recursive) { … }
}
void QueuedRequestDispatcher::SetUpAndDispatch(
QueuedRequest* request,
const std::vector<ClientInfo>& clients,
const ChromeCallback& chrome_callback,
const OsCallback& os_callback) { … }
void QueuedRequestDispatcher::SetUpAndDispatchVmRegionRequest(
QueuedVmRegionRequest* request,
const std::vector<ClientInfo>& clients,
const std::vector<base::ProcessId>& desired_pids,
const OsCallback& os_callback) { … }
QueuedRequestDispatcher::VmRegions
QueuedRequestDispatcher::FinalizeVmRegionRequest(
QueuedVmRegionRequest* request) { … }
void QueuedRequestDispatcher::Finalize(QueuedRequest* request,
TracingObserver* tracing_observer) { … }
bool QueuedRequestDispatcher::AddChromeMemoryDumpToTrace(
const base::trace_event::MemoryDumpRequestArgs& args,
base::ProcessId pid,
const base::trace_event::ProcessMemoryDump& raw_chrome_dump,
TracingObserver* tracing_observer,
const base::TimeTicks& timestamp) { … }
QueuedRequestDispatcher::ClientInfo::ClientInfo(
mojom::ClientProcess* client,
base::ProcessId pid,
mojom::ProcessType process_type,
std::optional<std::string> service_name)
: … { … }
QueuedRequestDispatcher::ClientInfo::ClientInfo(ClientInfo&& other) = default;
QueuedRequestDispatcher::ClientInfo::~ClientInfo() = default;
}