@@ -1301,50 +1301,47 @@ public int compare(AuthoritySyncStats lhs, AuthoritySyncStats rhs) {
13011301
13021302 elapsedTime = authoritySyncStats .elapsedTime ;
13031303 times = authoritySyncStats .times ;
1304- timeStr = String .format ("%d /%d%%" ,
1304+ timeStr = String .format ("%ds /%d%%" ,
13051305 elapsedTime / 1000 ,
13061306 elapsedTime * 100 / totalElapsedTime );
13071307 timesStr = String .format ("%d/%d%%" ,
13081308 times ,
13091309 times * 100 / totalTimes );
13101310 pw .printf (authorityFormat , name , timesStr , timeStr );
13111311
1312- if (authoritySyncStats .accountMap .size () > 1 ) {
1313- final List <AccountSyncStats > sortedAccounts =
1314- new ArrayList <AccountSyncStats >(
1315- authoritySyncStats .accountMap .values ());
1316- Collections .sort (sortedAccounts , new Comparator <AccountSyncStats >() {
1317- @ Override
1318- public int compare (AccountSyncStats lhs , AccountSyncStats rhs ) {
1319- // reverse order
1320- int compare = Integer .compare (rhs .times , lhs .times );
1321- if (compare == 0 ) {
1322- compare = Long .compare (rhs .elapsedTime , lhs .elapsedTime );
1323- }
1324- return compare ;
1312+ final List <AccountSyncStats > sortedAccounts =
1313+ new ArrayList <AccountSyncStats >(
1314+ authoritySyncStats .accountMap .values ());
1315+ Collections .sort (sortedAccounts , new Comparator <AccountSyncStats >() {
1316+ @ Override
1317+ public int compare (AccountSyncStats lhs , AccountSyncStats rhs ) {
1318+ // reverse order
1319+ int compare = Integer .compare (rhs .times , lhs .times );
1320+ if (compare == 0 ) {
1321+ compare = Long .compare (rhs .elapsedTime , lhs .elapsedTime );
13251322 }
1326- });
1327- for (AccountSyncStats stats : sortedAccounts ) {
1328- elapsedTime = stats .elapsedTime ;
1329- times = stats .times ;
1330- timeStr = String .format ("%d/%d%%" ,
1331- elapsedTime / 1000 ,
1332- elapsedTime * 100 / totalElapsedTime );
1333- timesStr = String .format ("%d/%d%%" ,
1334- times ,
1335- times * 100 / totalTimes );
1336- pw .printf (accountFormat , stats .name , timesStr , timeStr );
1323+ return compare ;
13371324 }
1325+ });
1326+ for (AccountSyncStats stats : sortedAccounts ) {
1327+ elapsedTime = stats .elapsedTime ;
1328+ times = stats .times ;
1329+ timeStr = String .format ("%ds/%d%%" ,
1330+ elapsedTime / 1000 ,
1331+ elapsedTime * 100 / totalElapsedTime );
1332+ timesStr = String .format ("%d/%d%%" ,
1333+ times ,
1334+ times * 100 / totalTimes );
1335+ pw .printf (accountFormat , stats .name , timesStr , timeStr );
13381336 }
13391337 pw .println (separator );
13401338 }
13411339
13421340 pw .println ();
13431341 pw .println ("Recent Sync History" );
13441342 final String format = " %-" + maxAccount + "s %s\n " ;
1345- String lastAuthorityName = null ;
1346- String lastAccountKey = null ;
1347- long lastEventTime = 0 ;
1343+ final Map <String , Long > lastTimeMap = Maps .newHashMap ();
1344+
13481345 for (int i = 0 ; i < N ; i ++) {
13491346 SyncStorageEngine .SyncHistoryItem item = items .get (i );
13501347 SyncStorageEngine .AuthorityInfo authority
@@ -1363,21 +1360,32 @@ public int compare(AccountSyncStats lhs, AccountSyncStats rhs) {
13631360 final long eventTime = item .eventTime ;
13641361 time .set (eventTime );
13651362
1366- pw .printf (" #%-3d: %s %8s %5.1fs" ,
1367- i + 1 ,
1368- formatTime (eventTime ),
1369- SyncStorageEngine .SOURCES [item .source ],
1370- ((float ) elapsedTime ) / 1000 );
1371- if (authorityName .equals (lastAuthorityName ) && accountKey .equals (lastAccountKey )) {
1372- final long span = (lastEventTime - eventTime ) / 1000 ;
1373- pw .printf (" %02d:%02d\n " , span / 60 , span % 60 );
1363+ final String key = authorityName + "/" + accountKey ;
1364+ final Long lastEventTime = lastTimeMap .get (key );
1365+ final String diffString ;
1366+ if (lastEventTime == null ) {
1367+ diffString = "" ;
13741368 } else {
1375- pw .printf (format , accountKey , authorityName );
1369+ final long diff = (lastEventTime - eventTime ) / 1000 ;
1370+ if (diff < 60 ) {
1371+ diffString = String .valueOf (diff );
1372+ } else if (diff < 3600 ) {
1373+ diffString = String .format ("%02d:%02d" , diff / 60 , diff % 60 );
1374+ } else {
1375+ final long sec = diff % 3600 ;
1376+ diffString = String .format ("%02d:%02d:%02d" ,
1377+ diff / 3600 , sec / 60 , sec % 60 );
1378+ }
13761379 }
1380+ lastTimeMap .put (key , eventTime );
13771381
1378- lastAuthorityName = authorityName ;
1379- lastAccountKey = accountKey ;
1380- lastEventTime = eventTime ;
1382+ pw .printf (" #%-3d: %s %8s %5.1fs %8s" ,
1383+ i + 1 ,
1384+ formatTime (eventTime ),
1385+ SyncStorageEngine .SOURCES [item .source ],
1386+ ((float ) elapsedTime ) / 1000 ,
1387+ diffString );
1388+ pw .printf (format , accountKey , authorityName );
13811389
13821390 if (item .event != SyncStorageEngine .EVENT_STOP
13831391 || item .upstreamActivity != 0
0 commit comments