• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 {TimestampConverterUtils} from 'common/time/test_utils';
18import {PropertyTreeBuilder} from 'test/unit/property_tree_builder';
19import {PropertySource} from 'trace/tree_node/property_tree_node';
20import {AddStatus} from './add_status';
21
22describe('AddStatus', () => {
23  let operation: AddStatus;
24  const time0 = TimestampConverterUtils.makeRealTimestamp(0n);
25  const time10 = TimestampConverterUtils.makeRealTimestamp(10n);
26
27  beforeEach(() => {
28    operation = new AddStatus();
29  });
30
31  it('adds aborted true due to wm abort time', () => {
32    const propertyRoot = new PropertyTreeBuilder()
33      .setIsRoot(true)
34      .setRootId('TransitionsTraceEntry')
35      .setName('transition')
36      .setChildren([
37        {name: 'wmData', children: [{name: 'abortTimeNs', value: time10}]},
38        {name: 'shellData', value: null},
39      ])
40      .build();
41
42    const expectedRoot = new PropertyTreeBuilder()
43      .setIsRoot(true)
44      .setRootId('TransitionsTraceEntry')
45      .setName('transition')
46      .setChildren([
47        {name: 'wmData', children: [{name: 'abortTimeNs', value: time10}]},
48        {name: 'shellData', value: null},
49        {name: 'aborted', value: true, source: PropertySource.CALCULATED},
50        {name: 'merged', value: false, source: PropertySource.CALCULATED},
51        {name: 'played', value: false, source: PropertySource.CALCULATED},
52      ])
53      .build();
54
55    operation.apply(propertyRoot);
56    expect(propertyRoot).toEqual(expectedRoot);
57  });
58
59  it('adds aborted true due to shell abort time', () => {
60    const propertyRoot = new PropertyTreeBuilder()
61      .setIsRoot(true)
62      .setRootId('TransitionsTraceEntry')
63      .setName('transition')
64      .setChildren([
65        {name: 'shellData', children: [{name: 'abortTimeNs', value: time10}]},
66        {name: 'wmData', value: null},
67      ])
68      .build();
69
70    const expectedRoot = new PropertyTreeBuilder()
71      .setIsRoot(true)
72      .setRootId('TransitionsTraceEntry')
73      .setName('transition')
74      .setChildren([
75        {name: 'shellData', children: [{name: 'abortTimeNs', value: time10}]},
76        {name: 'wmData', value: null},
77        {name: 'aborted', value: true, source: PropertySource.CALCULATED},
78        {name: 'merged', value: false, source: PropertySource.CALCULATED},
79        {name: 'played', value: false, source: PropertySource.CALCULATED},
80      ])
81      .build();
82
83    operation.apply(propertyRoot);
84    expect(propertyRoot).toEqual(expectedRoot);
85  });
86
87  it('adds aborted false due to 0 abort time', () => {
88    const propertyRoot = new PropertyTreeBuilder()
89      .setIsRoot(true)
90      .setRootId('TransitionsTraceEntry')
91      .setName('transition')
92      .setChildren([
93        {name: 'wmData', children: [{name: 'abortTimeNs', value: time0}]},
94        {name: 'shellData', children: [{name: 'abortTimeNs', value: time0}]},
95      ])
96      .build();
97
98    const expectedRoot = new PropertyTreeBuilder()
99      .setIsRoot(true)
100      .setRootId('TransitionsTraceEntry')
101      .setName('transition')
102      .setChildren([
103        {name: 'wmData', children: [{name: 'abortTimeNs', value: time0}]},
104        {
105          name: 'shellData',
106          children: [{name: 'abortTimeNs', value: time0}],
107        },
108        {name: 'aborted', value: false, source: PropertySource.CALCULATED},
109        {name: 'merged', value: false, source: PropertySource.CALCULATED},
110        {name: 'played', value: false, source: PropertySource.CALCULATED},
111      ])
112      .build();
113
114    operation.apply(propertyRoot);
115    expect(propertyRoot).toEqual(expectedRoot);
116  });
117
118  it('adds merged true', () => {
119    const propertyRoot = new PropertyTreeBuilder()
120      .setIsRoot(true)
121      .setRootId('TransitionsTraceEntry')
122      .setName('transition')
123      .setChildren([
124        {name: 'wmData', value: null},
125        {name: 'shellData', children: [{name: 'mergeTimeNs', value: time10}]},
126      ])
127      .build();
128
129    const expectedRoot = new PropertyTreeBuilder()
130      .setIsRoot(true)
131      .setRootId('TransitionsTraceEntry')
132      .setName('transition')
133      .setChildren([
134        {name: 'wmData', value: null},
135        {
136          name: 'shellData',
137          children: [{name: 'mergeTimeNs', value: time10}],
138        },
139        {name: 'aborted', value: false, source: PropertySource.CALCULATED},
140        {name: 'merged', value: true, source: PropertySource.CALCULATED},
141        {name: 'played', value: false, source: PropertySource.CALCULATED},
142      ])
143      .build();
144
145    operation.apply(propertyRoot);
146    expect(propertyRoot).toEqual(expectedRoot);
147  });
148
149  it('adds merged false due to 0 merge time', () => {
150    const propertyRoot = new PropertyTreeBuilder()
151      .setIsRoot(true)
152      .setRootId('TransitionsTraceEntry')
153      .setName('transition')
154      .setChildren([
155        {name: 'wmData', value: null},
156        {name: 'shellData', children: [{name: 'mergeTimeNs', value: time0}]},
157      ])
158      .build();
159
160    const expectedRoot = new PropertyTreeBuilder()
161      .setIsRoot(true)
162      .setRootId('TransitionsTraceEntry')
163      .setName('transition')
164      .setChildren([
165        {name: 'wmData', value: null},
166        {
167          name: 'shellData',
168          children: [{name: 'mergeTimeNs', value: time0}],
169        },
170        {name: 'aborted', value: false, source: PropertySource.CALCULATED},
171        {name: 'merged', value: false, source: PropertySource.CALCULATED},
172        {name: 'played', value: false, source: PropertySource.CALCULATED},
173      ])
174      .build();
175
176    operation.apply(propertyRoot);
177    expect(propertyRoot).toEqual(expectedRoot);
178  });
179
180  it('adds played true', () => {
181    const propertyRoot = new PropertyTreeBuilder()
182      .setIsRoot(true)
183      .setRootId('TransitionsTraceEntry')
184      .setName('transition')
185      .setChildren([
186        {
187          name: 'wmData',
188          children: [{name: 'finishTimeNs', value: time10}],
189        },
190        {name: 'shellData', value: null},
191      ])
192      .build();
193
194    const expectedRoot = new PropertyTreeBuilder()
195      .setIsRoot(true)
196      .setRootId('TransitionsTraceEntry')
197      .setName('transition')
198      .setChildren([
199        {
200          name: 'wmData',
201          children: [{name: 'finishTimeNs', value: time10}],
202        },
203        {name: 'shellData', value: null},
204        {name: 'aborted', value: false, source: PropertySource.CALCULATED},
205        {name: 'merged', value: false, source: PropertySource.CALCULATED},
206        {name: 'played', value: true, source: PropertySource.CALCULATED},
207      ])
208      .build();
209
210    operation.apply(propertyRoot);
211    expect(propertyRoot).toEqual(expectedRoot);
212  });
213
214  it('adds played false due to 0 finish time', () => {
215    const propertyRoot = new PropertyTreeBuilder()
216      .setIsRoot(true)
217      .setRootId('TransitionsTraceEntry')
218      .setName('transition')
219      .setChildren([
220        {name: 'wmData', value: null},
221        {name: 'shellData', children: [{name: 'finishTimeNs', value: time0}]},
222      ])
223      .build();
224
225    const expectedRoot = new PropertyTreeBuilder()
226      .setIsRoot(true)
227      .setRootId('TransitionsTraceEntry')
228      .setName('transition')
229      .setChildren([
230        {name: 'wmData', value: null},
231        {
232          name: 'shellData',
233          children: [{name: 'finishTimeNs', value: time0}],
234        },
235        {name: 'aborted', value: false, source: PropertySource.CALCULATED},
236        {name: 'merged', value: false, source: PropertySource.CALCULATED},
237        {name: 'played', value: false, source: PropertySource.CALCULATED},
238      ])
239      .build();
240
241    operation.apply(propertyRoot);
242    expect(propertyRoot).toEqual(expectedRoot);
243  });
244});
245