| // Copyright 2020 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| const UNCLASSIFIED_CATEGORY = 'unclassified'; |
| const UNCLASSIFIED_CATEGORY_NAME = 'Unclassified'; |
| |
| // Categories for zones. |
| export const CATEGORIES = new Map([ |
| [ |
| 'parser', new Set([ |
| 'AstStringConstants', |
| 'parser-zone', |
| 'pre-parser-zone', |
| ]) |
| ], |
| [ |
| 'misc', new Set([ |
| 'Run', |
| 'CanonicalHandleScope', |
| 'Temporary scoped zone', |
| 'UpdateFieldType', |
| ]) |
| ], |
| [ |
| 'interpreter', new Set([ |
| 'InterpreterCompilationJob', |
| ]) |
| ], |
| [ |
| 'regexp', new Set([ |
| 'CompileIrregexp', |
| ]) |
| ], |
| [ |
| 'compiler-huge', new Set([ |
| 'graph-zone', |
| 'instruction-zone', |
| 'pipeline-compilation-job-zone', |
| 'register-allocation-zone', |
| 'register-allocator-verifier-zone', |
| ]) |
| ], |
| [ |
| 'compiler-other', new Set([ |
| 'Compile', |
| 'V8.TFAllocateFPRegisters', |
| 'V8.TFAllocateGeneralRegisters', |
| 'V8.TFAssembleCode', |
| 'V8.TFAssignSpillSlots', |
| 'V8.TFBuildLiveRangeBundles', |
| 'V8.TFBuildLiveRanges', |
| 'V8.TFBytecodeGraphBuilder', |
| 'V8.TFCommitAssignment', |
| 'V8.TFConnectRanges', |
| 'V8.TFControlFlowOptimization', |
| 'V8.TFDecideSpillingMode', |
| 'V8.TFDecompressionOptimization', |
| 'V8.TFEarlyOptimization', |
| 'V8.TFEarlyTrimming', |
| 'V8.TFEffectLinearization', |
| 'V8.TFEscapeAnalysis', |
| 'V8.TFFinalizeCode', |
| 'V8.TFFrameElision', |
| 'V8.TFGenericLowering', |
| 'V8.TFHeapBrokerInitialization', |
| 'V8.TFInlining', |
| 'V8.TFJumpThreading', |
| 'V8.TFLateGraphTrimming', |
| 'V8.TFLateOptimization', |
| 'V8.TFLoadElimination', |
| 'V8.TFLocateSpillSlots', |
| 'V8.TFLoopPeeling', |
| 'V8.TFMachineOperatorOptimization', |
| 'V8.TFMeetRegisterConstraints', |
| 'V8.TFMemoryOptimization', |
| 'V8.TFOptimizeMoves', |
| 'V8.TFPopulatePointerMaps', |
| 'V8.TFResolveControlFlow', |
| 'V8.TFResolvePhis', |
| 'V8.TFScheduling', |
| 'V8.TFSelectInstructions', |
| 'V8.TFSerializeMetadata', |
| 'V8.TFSimplifiedLowering', |
| 'V8.TFStoreStoreElimination', |
| 'V8.TFTypedLowering', |
| 'V8.TFTyper', |
| 'V8.TFUntyper', |
| 'V8.TFVerifyGraph', |
| 'ValidatePendingAssessment', |
| 'codegen-zone', |
| ]) |
| ], |
| [UNCLASSIFIED_CATEGORY, new Set()], |
| ]); |
| |
| // Maps category to description text that is shown in html. |
| export const CATEGORY_NAMES = new Map([ |
| ['parser', 'Parser'], |
| ['misc', 'Misc'], |
| ['interpreter', 'Ignition'], |
| ['regexp', 'Regexp compiler'], |
| ['compiler-huge', 'TurboFan (huge zones)'], |
| ['compiler-other', 'TurboFan (other zones)'], |
| [UNCLASSIFIED_CATEGORY, UNCLASSIFIED_CATEGORY_NAME], |
| ]); |
| |
| function buildZoneToCategoryMap() { |
| const map = new Map(); |
| for (let [category, zone_names] of CATEGORIES.entries()) { |
| for (let zone_name of zone_names) { |
| if (map.has(zone_name)) { |
| console.error("Zone belongs to multiple categories: " + zone_name); |
| } else { |
| map.set(zone_name, category); |
| } |
| } |
| } |
| return map; |
| } |
| |
| const CATEGORY_BY_ZONE = buildZoneToCategoryMap(); |
| |
| // Maps zone name to category. |
| export function categoryByZoneName(zone_name) { |
| const category = CATEGORY_BY_ZONE.get(zone_name); |
| if (category !== undefined) return category; |
| return UNCLASSIFIED_CATEGORY; |
| } |