PssTable.java revision 34a6e844565494e4c7742a54ec6ef20475637c5e
14eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato/* 24eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * Copyright (C) 2013 The Android Open Source Project 34eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * 44eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License"); 54eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * you may not use this file except in compliance with the License. 64eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * You may obtain a copy of the License at 74eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * 84eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * http://www.apache.org/licenses/LICENSE-2.0 94eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * 104eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * Unless required by applicable law or agreed to in writing, software 114eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS, 124eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * See the License for the specific language governing permissions and 144eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * limitations under the License. 154eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato */ 164eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato 174eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onoratopackage com.android.internal.app.procstats; 184eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato 194eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onoratoimport static com.android.internal.app.procstats.ProcessStats.PSS_SAMPLE_COUNT; 204eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onoratoimport static com.android.internal.app.procstats.ProcessStats.PSS_MINIMUM; 214eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onoratoimport static com.android.internal.app.procstats.ProcessStats.PSS_AVERAGE; 224eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onoratoimport static com.android.internal.app.procstats.ProcessStats.PSS_MAXIMUM; 234eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onoratoimport static com.android.internal.app.procstats.ProcessStats.PSS_USS_MINIMUM; 244eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onoratoimport static com.android.internal.app.procstats.ProcessStats.PSS_USS_AVERAGE; 254eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onoratoimport static com.android.internal.app.procstats.ProcessStats.PSS_USS_MAXIMUM; 264eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onoratoimport static com.android.internal.app.procstats.ProcessStats.PSS_COUNT; 274eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato 284eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato/** 294eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * Class to accumulate PSS data. 304eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato */ 314eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onoratopublic class PssTable extends SparseMappingTable.Table { 324eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato /** 334eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * Construct the PssTable with 'tableData' as backing store 344eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * for the longs data. 354eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato */ 364eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato public PssTable(SparseMappingTable tableData) { 374eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato super(tableData); 384eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato } 394eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato 404eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato /** 414eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * Merge the the values from the other table into this one. 424eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato */ 434eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato public void mergeStats(PssTable that) { 444eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato final int N = that.getKeyCount(); 454eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato for (int i=0; i<N; i++) { 464eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato final int key = that.getKeyAt(i); 474eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato final int state = SparseMappingTable.getIdFromKey(key); 484eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato mergeStats(state, (int)that.getValue(key, PSS_SAMPLE_COUNT), 494eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato that.getValue(key, PSS_MINIMUM), 504eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato that.getValue(key, PSS_AVERAGE), 514eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato that.getValue(key, PSS_MAXIMUM), 524eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato that.getValue(key, PSS_USS_MINIMUM), 534eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato that.getValue(key, PSS_USS_AVERAGE), 544eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato that.getValue(key, PSS_USS_MAXIMUM)); 554eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato } 564eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato } 574eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato 584eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato /** 594eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * Merge the supplied PSS data in. The new min pss will be the minimum of the existing 604eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato * one and the new one, the average will now incorporate the new average, etc. 614eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato */ 624eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato public void mergeStats(int state, int inCount, long minPss, long avgPss, long maxPss, 634eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato long minUss, long avgUss, long maxUss) { 644eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato final int key = getOrAddKey((byte)state, PSS_COUNT); 654eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato final long count = getValue(key, PSS_SAMPLE_COUNT); 664eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato if (count == 0) { 674eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato setValue(key, PSS_SAMPLE_COUNT, inCount); 684eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato setValue(key, PSS_MINIMUM, minPss); 694eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato setValue(key, PSS_AVERAGE, avgPss); 704eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato setValue(key, PSS_MAXIMUM, maxPss); 714eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato setValue(key, PSS_USS_MINIMUM, minUss); 724eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato setValue(key, PSS_USS_AVERAGE, avgUss); 734eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato setValue(key, PSS_USS_MAXIMUM, maxUss); 744eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato } else { 754eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato setValue(key, PSS_SAMPLE_COUNT, count + inCount); 764eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato 774eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato long val; 784eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato 794eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato val = getValue(key, PSS_MINIMUM); 804eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato if (val > minPss) { 814eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato setValue(key, PSS_MINIMUM, minPss); 824eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato } 834eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato 844eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato val = getValue(key, PSS_AVERAGE); 854eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato setValue(key, PSS_AVERAGE, 864eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato (long)(((val*(double)count)+(avgPss*(double)inCount)) / (count+inCount))); 874eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato 884eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato val = getValue(key, PSS_MAXIMUM); 894eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato if (val < maxPss) { 904eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato setValue(key, PSS_MAXIMUM, maxPss); 914eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato } 924eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato 934eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato val = getValue(key, PSS_USS_MINIMUM); 944eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato if (val > minUss) { 954eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato setValue(key, PSS_USS_MINIMUM, minUss); 964eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato } 974eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato 984eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato val = getValue(key, PSS_USS_AVERAGE); 9934a6e844565494e4c7742a54ec6ef20475637c5eMakoto Onuki setValue(key, PSS_USS_AVERAGE, 1004eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato (long)(((val*(double)count)+(avgUss*(double)inCount)) / (count+inCount))); 1014eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato 1024eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato val = getValue(key, PSS_USS_MAXIMUM); 1034eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato if (val < maxUss) { 1044eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato setValue(key, PSS_USS_MAXIMUM, maxUss); 1054eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato } 1064eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato } 1074eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato } 1084eb64fdbcf899a81d0a6a04dc3658d03d9df8247Joe Onorato} 109