blob: 6c1ae31122008d9945d28f05d92dc9ff66c2253e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* $Id$ */
package org.apache.fop.memory;
import java.util.List;
class Stats {
private static final int INTERVAL = 2000;
private long startTime = System.currentTimeMillis();
private long lastProgressDump = startTime;
private int pagesProduced;
private int totalPagesProduced;
private int step;
private int stepCount;
private List samples = new java.util.LinkedList();
public void checkStats() {
long now = System.currentTimeMillis();
if (now > lastProgressDump + INTERVAL) {
dumpStats();
reset();
}
}
public void notifyPagesProduced(int count) {
pagesProduced += count;
totalPagesProduced += count;
}
public void reset() {
pagesProduced = 0;
lastProgressDump = System.currentTimeMillis();
}
public void dumpStats() {
long duration = System.currentTimeMillis() - lastProgressDump;
if (stepCount != 0) {
int progress = 100 * step / stepCount;
System.out.println("Progress: " + progress + "%, " + (stepCount - step) + " left");
}
long ppm = 60000 * pagesProduced / duration;
System.out.println("Speed: " + ppm + "ppm");
samples.add(new Sample((int)ppm));
}
public void dumpFinalStats() {
long duration = System.currentTimeMillis() - startTime;
System.out.println("Final statistics");
System.out.println("Pages produced: " + totalPagesProduced);
long ppm = 60000 * totalPagesProduced / duration;
System.out.println("Average speed: " + ppm + "ppm");
}
public String getGoogleChartURL() {
StringBuffer sb = new StringBuffer("http://chart.apis.google.com/chart?");
//http://chart.apis.google.com/chart?cht=ls&chd=t:60,40&chs=250x100&chl=Hello|World
sb.append("cht=ls");
sb.append("&chd=t:");
boolean first = true;
int maxY = 0;
for (Object sample1 : samples) {
Sample sample = (Sample) sample1;
if (first) {
first = false;
} else {
sb.append(',');
}
sb.append(sample.ppm);
maxY = Math.max(maxY, sample.ppm);
}
int ceilY = ((maxY / 1000) + 1) * 1000;
sb.append("&chs=1000x300"); //image size
sb.append("&chds=0,").append(ceilY); //data scale
sb.append("&chg=0,20"); //scale steps
sb.append("&chxt=y");
sb.append("&chxl=0:|0|" + ceilY);
return sb.toString();
}
private static class Sample {
private int ppm;
public Sample(int ppm) {
this.ppm = ppm;
}
}
public void progress(int step, int stepCount) {
this.step = step;
this.stepCount = stepCount;
}
}