1/*
2 * Copyright (C) 2024 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 {AddDefaults} from 'parsers/operations/add_defaults';
18import {SetFormatters} from 'parsers/operations/set_formatters';
19import {TranslateIntDef} from 'parsers/operations/translate_intdef';
20import {WM_DENYLIST_PROPERTIES} from 'parsers/window_manager/wm_denylist_properties';
21import {WM_EAGER_PROPERTIES} from 'parsers/window_manager/wm_eager_properties';
22import {WmProtoType} from 'parsers/window_manager/wm_proto_type';
23import * as WmTamperedProtos from 'parsers/window_manager/wm_tampered_protos';
24import {RECT_FORMATTER} from 'trace/tree_node/formatters';
25import {Operation} from 'trace/tree_node/operations/operation';
26import {PropertyTreeNode} from 'trace/tree_node/property_tree_node';
27import {AddIsVisible} from './add_is_visible';
28import {AddWindowType} from './add_window_type';
29
30export interface OperationLists {
31  common: Array<Operation<PropertyTreeNode>>;
32  eager: Array<Operation<PropertyTreeNode>>;
33  lazy: Array<Operation<PropertyTreeNode>>;
34}
35
36export const WM_OPERATION_LISTS = new Map<WmProtoType, OperationLists>([
37  [
38    WmProtoType.WindowManagerService,
39    {
40      common: [
41        new SetFormatters(WmTamperedProtos.WindowManagerServiceField),
42        new TranslateIntDef(WmTamperedProtos.WindowManagerServiceField),
43      ],
44      eager: [
45        new AddDefaults(
46          WmTamperedProtos.WindowManagerServiceField,
47          WM_EAGER_PROPERTIES.get(WmProtoType.WindowManagerService),
48        ),
49      ],
50      lazy: [
51        new AddDefaults(
52          WmTamperedProtos.WindowManagerServiceField,
53          undefined,
54          WM_DENYLIST_PROPERTIES.get(WmProtoType.WindowManagerService),
55        ),
56      ],
57    },
58  ],
59
60  [
61    WmProtoType.RootWindowContainer,
62    {
63      common: [
64        new SetFormatters(WmTamperedProtos.RootWindowContainerField),
65        new TranslateIntDef(WmTamperedProtos.RootWindowContainerField),
66      ],
67      eager: [
68        new AddDefaults(
69          WmTamperedProtos.RootWindowContainerField,
70          WM_EAGER_PROPERTIES.get(WmProtoType.RootWindowContainer),
71        ),
72      ],
73      lazy: [
74        new AddDefaults(
75          WmTamperedProtos.RootWindowContainerField,
76          undefined,
77          WM_DENYLIST_PROPERTIES.get(WmProtoType.RootWindowContainer),
78        ),
79      ],
80    },
81  ],
82
83  [
84    WmProtoType.WindowContainer,
85    {
86      common: [
87        new SetFormatters(WmTamperedProtos.WindowContainerField),
88        new TranslateIntDef(WmTamperedProtos.WindowContainerField),
89      ],
90      eager: [
91        new AddDefaults(
92          WmTamperedProtos.WindowContainerField,
93          WM_EAGER_PROPERTIES.get(WmProtoType.WindowContainer),
94        ),
95        new AddIsVisible(),
96      ],
97      lazy: [
98        new AddDefaults(
99          WmTamperedProtos.WindowContainerField,
100          undefined,
101          WM_DENYLIST_PROPERTIES.get(WmProtoType.WindowContainer),
102        ),
103      ],
104    },
105  ],
106
107  [
108    WmProtoType.DisplayContent,
109    {
110      common: [
111        new SetFormatters(WmTamperedProtos.DisplayContentField),
112        new TranslateIntDef(WmTamperedProtos.DisplayContentField),
113      ],
114      eager: [
115        new AddDefaults(
116          WmTamperedProtos.DisplayContentField,
117          WM_EAGER_PROPERTIES.get(WmProtoType.DisplayContent),
118        ),
119      ],
120      lazy: [
121        new AddDefaults(
122          WmTamperedProtos.DisplayContentField,
123          undefined,
124          WM_DENYLIST_PROPERTIES.get(WmProtoType.DisplayContent),
125        ),
126      ],
127    },
128  ],
129
130  [
131    WmProtoType.DisplayArea,
132    {
133      common: [
134        new SetFormatters(WmTamperedProtos.DisplayAreaField),
135        new TranslateIntDef(WmTamperedProtos.DisplayAreaField),
136      ],
137      eager: [
138        new AddDefaults(
139          WmTamperedProtos.DisplayAreaField,
140          WM_EAGER_PROPERTIES.get(WmProtoType.DisplayArea),
141        ),
142      ],
143      lazy: [
144        new AddDefaults(
145          WmTamperedProtos.DisplayAreaField,
146          undefined,
147          WM_DENYLIST_PROPERTIES.get(WmProtoType.DisplayArea),
148        ),
149      ],
150    },
151  ],
152
153  [
154    WmProtoType.Task,
155    {
156      common: [
157        new SetFormatters(WmTamperedProtos.TaskField),
158        new TranslateIntDef(WmTamperedProtos.TaskField),
159      ],
160      eager: [
161        new AddDefaults(
162          WmTamperedProtos.TaskField,
163          WM_EAGER_PROPERTIES.get(WmProtoType.Task),
164        ),
165      ],
166      lazy: [
167        new AddDefaults(
168          WmTamperedProtos.TaskField,
169          undefined,
170          WM_DENYLIST_PROPERTIES.get(WmProtoType.Task),
171        ),
172      ],
173    },
174  ],
175
176  [
177    WmProtoType.Activity,
178    {
179      common: [
180        new SetFormatters(WmTamperedProtos.ActivityField),
181        new TranslateIntDef(WmTamperedProtos.ActivityField),
182      ],
183      eager: [
184        new AddDefaults(
185          WmTamperedProtos.ActivityField,
186          WM_EAGER_PROPERTIES.get(WmProtoType.Activity),
187        ),
188        new AddIsVisible(),
189      ],
190      lazy: [
191        new AddDefaults(
192          WmTamperedProtos.ActivityField,
193          undefined,
194          WM_DENYLIST_PROPERTIES.get(WmProtoType.Activity),
195        ),
196      ],
197    },
198  ],
199
200  [
201    WmProtoType.WindowToken,
202    {
203      common: [
204        new SetFormatters(WmTamperedProtos.WindowTokenField),
205        new TranslateIntDef(WmTamperedProtos.WindowTokenField),
206      ],
207      eager: [
208        new AddDefaults(
209          WmTamperedProtos.WindowTokenField,
210          WM_EAGER_PROPERTIES.get(WmProtoType.WindowToken),
211        ),
212      ],
213      lazy: [
214        new AddDefaults(
215          WmTamperedProtos.WindowTokenField,
216          undefined,
217          WM_DENYLIST_PROPERTIES.get(WmProtoType.WindowToken),
218        ),
219      ],
220    },
221  ],
222
223  [
224    WmProtoType.WindowState,
225    {
226      common: [
227        new SetFormatters(
228          WmTamperedProtos.WindowStateField,
229          new Map([
230            ['containingFrame', RECT_FORMATTER],
231            ['parentFrame', RECT_FORMATTER],
232          ]),
233        ),
234        new TranslateIntDef(WmTamperedProtos.WindowStateField),
235      ],
236      eager: [
237        new AddDefaults(
238          WmTamperedProtos.WindowStateField,
239          WM_EAGER_PROPERTIES.get(WmProtoType.WindowState),
240        ),
241        new AddWindowType(),
242        new AddIsVisible(),
243      ],
244      lazy: [
245        new AddDefaults(
246          WmTamperedProtos.WindowStateField,
247          undefined,
248          WM_DENYLIST_PROPERTIES.get(WmProtoType.WindowState),
249        ),
250      ],
251    },
252  ],
253
254  [
255    WmProtoType.TaskFragment,
256    {
257      common: [
258        new SetFormatters(WmTamperedProtos.TaskFragmentField),
259        new TranslateIntDef(WmTamperedProtos.TaskFragmentField),
260      ],
261      eager: [
262        new AddDefaults(
263          WmTamperedProtos.TaskFragmentField,
264          WM_EAGER_PROPERTIES.get(WmProtoType.TaskFragment),
265        ),
266      ],
267      lazy: [
268        new AddDefaults(
269          WmTamperedProtos.TaskFragmentField,
270          undefined,
271          WM_DENYLIST_PROPERTIES.get(WmProtoType.TaskFragment),
272        ),
273      ],
274    },
275  ],
276]);
277