View Javadoc
1   /*
2    * Copyright (C) 2017, Google Inc. and others
3    *
4    * This program and the accompanying materials are made available under the
5    * terms of the Eclipse Distribution License v. 1.0 which is available at
6    * https://www.eclipse.org/org/documents/edl-v10.php.
7    *
8    * SPDX-License-Identifier: BSD-3-Clause
9    */
10  
11  package org.eclipse.jgit.internal.storage.dfs;
12  
13  /**
14   * IO statistics for a {@link org.eclipse.jgit.internal.storage.dfs.DfsReader}.
15   */
16  public class DfsReaderIoStats {
17  	/** POJO to accumulate IO statistics. */
18  	public static class Accumulator {
19  		/** Number of times the reader explicitly called scanPacks. */
20  		long scanPacks;
21  
22  		/** Total number of cache hits for pack indexes. */
23  		long idxCacheHit;
24  
25  		/** Total number of cache hits for reverse indexes. */
26  		long ridxCacheHit;
27  
28  		/** Total number of cache hits for bitmap indexes. */
29  		long bitmapCacheHit;
30  
31  		/** Total number of complete pack indexes read into memory. */
32  		long readIdx;
33  
34  		/** Total number of complete bitmap indexes read into memory. */
35  		long readBitmap;
36  
37  		/** Total number of reverse indexes added into memory. */
38  		long readReverseIdx;
39  
40  		/** Total number of bytes read from pack indexes. */
41  		long readIdxBytes;
42  
43  		/** Total microseconds spent reading pack indexes. */
44  		long readIdxMicros;
45  
46  		/** Total microseconds spent creating reverse indexes. */
47  		long readReverseIdxMicros;
48  
49  		/** Total number of bytes read from bitmap indexes. */
50  		long readBitmapIdxBytes;
51  
52  		/** Total microseconds spent reading bitmap indexes. */
53  		long readBitmapIdxMicros;
54  
55  		/** Total number of block cache hits. */
56  		long blockCacheHit;
57  
58  		/**
59  		 * Total number of discrete blocks actually read from pack file(s), that is,
60  		 * block cache misses.
61  		 */
62  		long readBlock;
63  
64  		/**
65  		 * Total number of compressed bytes read during cache misses, as block sized
66  		 * units.
67  		 */
68  		long readBlockBytes;
69  
70  		/** Total microseconds spent reading {@link #readBlock} blocks. */
71  		long readBlockMicros;
72  
73  		/** Total number of bytes decompressed. */
74  		long inflatedBytes;
75  
76  		/** Total microseconds spent inflating compressed bytes. */
77  		long inflationMicros;
78  
79  		Accumulator() {
80  		}
81  	}
82  
83  	private final Accumulator stats;
84  
85  	DfsReaderIoStats(Accumulator stats) {
86  		this.stats = stats;
87  	}
88  
89  	/**
90  	 * Get number of times the reader explicitly called scanPacks.
91  	 *
92  	 * @return number of times the reader explicitly called scanPacks.
93  	 */
94  	public long getScanPacks() {
95  		return stats.scanPacks;
96  	}
97  
98  	/**
99  	 * Get total number of pack index cache hits.
100 	 *
101 	 * @return total number of pack index cache hits.
102 	 */
103 	public long getPackIndexCacheHits() {
104 		return stats.idxCacheHit;
105 	}
106 
107 	/**
108 	 * Get total number of reverse index cache hits.
109 	 *
110 	 * @return total number of reverse index cache hits.
111 	 */
112 	public long getReverseIndexCacheHits() {
113 		return stats.ridxCacheHit;
114 	}
115 
116 	/**
117 	 * Get total number of bitmap index cache hits.
118 	 *
119 	 * @return total number of bitmap index cache hits.
120 	 */
121 	public long getBitmapIndexCacheHits() {
122 		return stats.bitmapCacheHit;
123 	}
124 
125 	/**
126 	 * Get total number of complete pack indexes read into memory.
127 	 *
128 	 * @return total number of complete pack indexes read into memory.
129 	 */
130 	public long getReadPackIndexCount() {
131 		return stats.readIdx;
132 	}
133 
134 	/**
135 	 * Get total number of times the reverse index was computed.
136 	 *
137 	 * @return total number of reverse index was computed.
138 	 */
139 	public long getReadReverseIndexCount() {
140 		return stats.readReverseIdx;
141 	}
142 
143 	/**
144 	 * Get total number of complete bitmap indexes read into memory.
145 	 *
146 	 * @return total number of complete bitmap indexes read into memory.
147 	 */
148 	public long getReadBitmapIndexCount() {
149 		return stats.readBitmap;
150 	}
151 
152 	/**
153 	 * Get total number of bytes read from pack indexes.
154 	 *
155 	 * @return total number of bytes read from pack indexes.
156 	 */
157 	public long getReadIndexBytes() {
158 		return stats.readIdxBytes;
159 	}
160 
161 	/**
162 	 * Get total microseconds spent reading pack indexes.
163 	 *
164 	 * @return total microseconds spent reading pack indexes.
165 	 */
166 	public long getReadIndexMicros() {
167 		return stats.readIdxMicros;
168 	}
169 
170 	/**
171 	 * Get total microseconds spent creating reverse indexes.
172 	 *
173 	 * @return total microseconds spent creating reverse indexes.
174 	 */
175 	public long getReadReverseIndexMicros() {
176 		return stats.readReverseIdxMicros;
177 	}
178 
179 	/**
180 	 * Get total number of bytes read from bitmap indexes.
181 	 *
182 	 * @return total number of bytes read from bitmap indexes.
183 	 */
184 	public long getReadBitmapIndexBytes() {
185 		return stats.readBitmapIdxBytes;
186 	}
187 
188 	/**
189 	 * Get total microseconds spent reading bitmap indexes.
190 	 *
191 	 * @return total microseconds spent reading bitmap indexes.
192 	 */
193 	public long getReadBitmapIndexMicros() {
194 		return stats.readBitmapIdxMicros;
195 	}
196 
197 	/**
198 	 * Get total number of block cache hits.
199 	 *
200 	 * @return total number of block cache hits.
201 	 */
202 	public long getBlockCacheHits() {
203 		return stats.blockCacheHit;
204 	}
205 
206 	/**
207 	 * Get total number of discrete blocks actually read from pack file(s), that
208 	 * is, block cache misses.
209 	 *
210 	 * @return total number of discrete blocks read from pack file(s).
211 	 */
212 	public long getReadBlocksCount() {
213 		return stats.readBlock;
214 	}
215 
216 	/**
217 	 * Get total number of compressed bytes read during cache misses, as block
218 	 * sized units.
219 	 *
220 	 * @return total number of compressed bytes read as block sized units.
221 	 */
222 	public long getReadBlocksBytes() {
223 		return stats.readBlockBytes;
224 	}
225 
226 	/**
227 	 * Get total microseconds spent reading blocks during cache misses.
228 	 *
229 	 * @return total microseconds spent reading blocks.
230 	 */
231 	public long getReadBlocksMicros() {
232 		return stats.readBlockMicros;
233 	}
234 
235 	/**
236 	 * Get total number of bytes decompressed.
237 	 *
238 	 * @return total number of bytes decompressed.
239 	 */
240 	public long getInflatedBytes() {
241 		return stats.inflatedBytes;
242 	}
243 
244 	/**
245 	 * Get total microseconds spent inflating compressed bytes.
246 	 *
247 	 * @return total microseconds inflating compressed bytes.
248 	 */
249 	public long getInflationMicros() {
250 		return stats.inflationMicros;
251 	}
252 }