1 /*
2  * Copyright (C) 2023 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 
17 package android.tools.traces.wm
18 
19 import android.tools.Timestamp
20 
21 data class WmTransitionData(
22     val createTime: Timestamp? = null,
23     val sendTime: Timestamp? = null,
24     val abortTime: Timestamp? = null,
25     val finishTime: Timestamp? = null,
26     val startingWindowRemoveTime: Timestamp? = null,
27     val startTransactionId: Long? = null,
28     val finishTransactionId: Long? = null,
29     val type: TransitionType? = null,
30     val changes: Collection<TransitionChange>? = null,
31 ) {
32     init {
33         // We should never have empty timestamps, those should be passed as null
<lambda>null34         require(!(createTime?.isEmpty ?: false)) { "createTime was empty timestamp" }
<lambda>null35         require(!(sendTime?.isEmpty ?: false)) { "sendTime was empty timestamp" }
<lambda>null36         require(!(abortTime?.isEmpty ?: false)) { "abortTime was empty timestamp" }
<lambda>null37         require(!(finishTime?.isEmpty ?: false)) { "finishTime was empty timestamp" }
38     }
39 
mergenull40     fun merge(wmData: WmTransitionData) =
41         WmTransitionData(
42             wmData.createTime ?: createTime,
43             wmData.sendTime ?: sendTime,
44             wmData.abortTime ?: abortTime,
45             wmData.finishTime ?: finishTime,
46             wmData.startingWindowRemoveTime ?: startingWindowRemoveTime,
47             wmData.startTransactionId ?: startTransactionId,
48             wmData.finishTransactionId ?: finishTransactionId,
49             wmData.type ?: type,
50             wmData.changes ?: changes
51         )
52 }
53