1/* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17import {Traces} from 'trace/traces'; 18import {TraceType} from 'trace/trace_type'; 19import {Viewer} from './viewer'; 20import {ViewerInputMethodClients} from './viewer_input_method_clients/viewer_input_method_clients'; 21import {ViewerInputMethodManagerService} from './viewer_input_method_manager_service/viewer_input_method_manager_service'; 22import {ViewerInputMethodService} from './viewer_input_method_service/viewer_input_method_service'; 23import {ViewerProtoLog} from './viewer_protolog/viewer_protolog'; 24import {ViewerScreenRecording} from './viewer_screen_recording/viewer_screen_recording'; 25import {ViewerSurfaceFlinger} from './viewer_surface_flinger/viewer_surface_flinger'; 26import {ViewerTransactions} from './viewer_transactions/viewer_transactions'; 27import {ViewerTransitions} from './viewer_transitions/viewer_transitions'; 28import {ViewerViewCapture} from './viewer_view_capture/viewer_view_capture'; 29import {ViewerWindowManager} from './viewer_window_manager/viewer_window_manager'; 30 31class ViewerFactory { 32 // Note: 33 // the final order of tabs/views in the UI corresponds the order of the 34 // respective viewers below 35 static readonly VIEWERS = [ 36 ViewerSurfaceFlinger, 37 ViewerWindowManager, 38 ViewerInputMethodClients, 39 ViewerInputMethodManagerService, 40 ViewerInputMethodService, 41 ViewerTransactions, 42 ViewerProtoLog, 43 ViewerScreenRecording, 44 ViewerTransitions, 45 ViewerViewCapture, 46 ]; 47 48 createViewers(activeTraceTypes: Set<TraceType>, traces: Traces, storage: Storage): Viewer[] { 49 const viewers: Viewer[] = []; 50 51 for (const Viewer of ViewerFactory.VIEWERS) { 52 const areViewerDepsSatisfied = Viewer.DEPENDENCIES.every((traceType: TraceType) => 53 activeTraceTypes.has(traceType) 54 ); 55 56 if (areViewerDepsSatisfied) { 57 viewers.push(new Viewer(traces, storage)); 58 } 59 } 60 61 return viewers; 62 } 63} 64 65export {ViewerFactory}; 66