// Copyright 2022 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. import * as Helpers from '../helpers/helpers.js'; import * as Types from '../types/types.js'; import {data as metaHandlerData} from './MetaHandler.js'; import type {HandlerName} from './types.js'; // Each thread contains events. Events indicate the thread and process IDs, which are // used to store the event in the correct process thread entry below. let eventsInProcessThread = new Map>(); let mainGPUThreadTasks: Types.Events.GPUTask[] = []; export function reset(): void { eventsInProcessThread = new Map(); mainGPUThreadTasks = []; } export function handleEvent(event: Types.Events.Event): void { if (!Types.Events.isGPUTask(event)) { return; } Helpers.Trace.addEventToProcessThread(event, eventsInProcessThread); } export async function finalize(): Promise { const {gpuProcessId, gpuThreadId} = metaHandlerData(); const gpuThreadsForProcess = eventsInProcessThread.get(gpuProcessId); if (gpuThreadsForProcess && gpuThreadId) { mainGPUThreadTasks = gpuThreadsForProcess.get(gpuThreadId) || []; } } export interface GPUHandlerReturnData { mainGPUThreadTasks: readonly Types.Events.GPUTask[]; } export function data(): GPUHandlerReturnData { return { mainGPUThreadTasks, }; } export function deps(): HandlerName[] { return ['Meta']; }