1 /*
2  * Copyright 2017 Google Inc.
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  *     https://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 trebuchet.model.fragments
18 
19 import trebuchet.model.InvalidId
20 import trebuchet.model.SchedSlice
21 import trebuchet.model.base.Slice
22 import trebuchet.model.base.SliceGroup
23 
24 class ThreadModelFragment(var id: Int, var process: ProcessModelFragment, var name: String? = null) {
25     val slicesBuilder = SliceGroupBuilder()
26     val schedulingStateBuilder = SchedulingSliceFragment.Builder()
27 
hintnull28     fun hint(pid: Int = InvalidId, name: String? = null, tgid: Int = InvalidId, processName: String? = null) {
29         if (this.id == InvalidId) this.id = pid
30         if (this.name == null) this.name = name
31         if (this.process.id == InvalidId) this.process.id = tgid
32         if (this.process.name == null) this.process.name = processName
33     }
34 
35     val slices: List<SliceGroup> get() {
36         if (slicesBuilder.hasOpenSlices()) {
37             throw IllegalStateException("SliceBuilder has open slices, not finished")
38         }
39         return slicesBuilder.slices
40     }
41 
42     val schedSlices: List<SchedSlice> get() {
43         // TODO: Close open slices
44         return schedulingStateBuilder.slices
45     }
46 }