1 /*
2  * Copyright (C) 2017 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 package android.car.storagemonitoring;
17 
18 import android.annotation.SystemApi;
19 
20 /**
21  * Record of data as extracted from /proc/uid_io/stats
22  *
23  * @hide
24  */
25 @SystemApi
26 public final class UidIoRecord {
27 
28     public final int uid;
29 
30     public final long foreground_rchar;
31     public final long foreground_wchar;
32     public final long foreground_read_bytes;
33     public final long foreground_write_bytes;
34     public final long foreground_fsync;
35 
36     public final long background_rchar;
37     public final long background_wchar;
38     public final long background_read_bytes;
39     public final long background_write_bytes;
40     public final long background_fsync;
41 
UidIoRecord(int uid, long foreground_rchar, long foreground_wchar, long foreground_read_bytes, long foreground_write_bytes, long foreground_fsync, long background_rchar, long background_wchar, long background_read_bytes, long background_write_bytes, long background_fsync)42     public UidIoRecord(int uid,
43             long foreground_rchar,
44             long foreground_wchar,
45             long foreground_read_bytes,
46             long foreground_write_bytes,
47             long foreground_fsync,
48             long background_rchar,
49             long background_wchar,
50             long background_read_bytes,
51             long background_write_bytes,
52             long background_fsync) {
53         this.uid = uid;
54 
55         this.foreground_rchar = foreground_rchar;
56         this.foreground_wchar = foreground_wchar;
57         this.foreground_read_bytes = foreground_read_bytes;
58         this.foreground_write_bytes = foreground_write_bytes;
59         this.foreground_fsync = foreground_fsync;
60 
61         this.background_rchar = background_rchar;
62         this.background_wchar = background_wchar;
63         this.background_read_bytes = background_read_bytes;
64         this.background_write_bytes = background_write_bytes;
65         this.background_fsync = background_fsync;
66     }
67 
68     /** @hide */
delta(IoStatsEntry other)69     public UidIoRecord delta(IoStatsEntry other) {
70         if (uid != other.uid) {
71             throw new IllegalArgumentException("cannot calculate delta between different user IDs");
72         }
73 
74         return new UidIoRecord(uid,
75             foreground_rchar - other.foreground.bytesRead,
76             foreground_wchar - other.foreground.bytesWritten,
77             foreground_read_bytes - other.foreground.bytesReadFromStorage,
78             foreground_write_bytes - other.foreground.bytesWrittenToStorage,
79             foreground_fsync - other.foreground.fsyncCalls,
80             background_rchar - other.background.bytesRead,
81             background_wchar - other.background.bytesWritten,
82             background_read_bytes - other.background.bytesReadFromStorage,
83             background_write_bytes - other.background.bytesWrittenToStorage,
84             background_fsync - other.background.fsyncCalls);
85     }
86 
87     /** @hide */
delta(UidIoRecord other)88     public UidIoRecord delta(UidIoRecord other) {
89         if (uid != other.uid) {
90             throw new IllegalArgumentException("cannot calculate delta between different user IDs");
91         }
92 
93         return new UidIoRecord(uid,
94             foreground_rchar - other.foreground_rchar,
95             foreground_wchar - other.foreground_wchar,
96             foreground_read_bytes - other.foreground_read_bytes,
97             foreground_write_bytes - other.foreground_write_bytes,
98             foreground_fsync - other.foreground_fsync,
99             background_rchar - other.background_rchar,
100             background_wchar - other.background_wchar,
101             background_read_bytes - other.background_read_bytes,
102             background_write_bytes - other.background_write_bytes,
103             background_fsync - other.background_fsync);
104     }
105 }
106