blob: ba325f2fbaa2e45eb651969f9fa1c0e9a1928134 [file] [log] [blame]
/*
* Copyright 2010 Google Inc.
*
* Licensed 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.
*/
package com.google.gwt.core.ext.linker;
import com.google.gwt.core.ext.Linker;
import com.google.gwt.core.linker.SoycReportLinker;
import java.util.Collection;
import java.util.concurrent.atomic.AtomicInteger;
/**
* Captures some metrics from the module load and initial type oracle compile
* step.
*/
@Transferable
public class ModuleMetricsArtifact extends Artifact<ModuleMetricsArtifact> {
/*
* In an ideal world, there should be only one of these module instances, but
* since this information is recomputed for each precompile task, there will
* be multiple entries which are all about the same.
*/
private static AtomicInteger nextInstance = new AtomicInteger(0);
private final int instanceId;
private long elapsedMilliseconds;
private String[] sourceFiles;
private String[] initialTypes;
public ModuleMetricsArtifact() {
this(SoycReportLinker.class, nextInstance.getAndIncrement());
}
protected ModuleMetricsArtifact(Class<? extends Linker> linker, int instanceId) {
super(linker);
this.instanceId = instanceId;
}
/**
* @return wall clock time elapsed since start of module load to end of the
* initial type oracle build.
*/
public long getElapsedMilliseconds() {
return elapsedMilliseconds;
}
/**
* @return the number of types resulting from the type oracle build which
* compiles all of the source files initially presented to the
* compiler.
*/
public String[] getInitialTypes() {
return initialTypes;
}
/**
* @return the source files initially presented to the compiler
*/
public String[] getSourceFiles() {
return sourceFiles;
}
@Override
public int hashCode() {
return getName().hashCode();
}
/**
* @param elapsedMilliseconds wall clock time elapsed since start of module
* load to end of the initial type oracle build.
*/
public ModuleMetricsArtifact setElapsedMilliseconds(long elapsedMilliseconds) {
this.elapsedMilliseconds = elapsedMilliseconds;
return this;
}
/**
* @param initialTypes the number of types resulting from the initial type
* oracle build which compiles all of the source files initially
* presented to the compiler.
*/
public ModuleMetricsArtifact setInitialTypes(Collection<String> initialTypes) {
this.initialTypes = initialTypes.toArray(new String[initialTypes.size()]);
return this;
}
/**
* @param sourceFiles the list of source files presented to the compiler on
* the module source path.
*/
public ModuleMetricsArtifact setSourceFiles(String[] sourceFiles) {
this.sourceFiles = sourceFiles;
return this;
}
@Override
protected int compareToComparableArtifact(ModuleMetricsArtifact o) {
return getName().compareTo(o.getName());
}
@Override
protected final Class<ModuleMetricsArtifact> getComparableArtifactType() {
return ModuleMetricsArtifact.class;
}
private String getName() {
return "ModuleMetricsArtifact-" + instanceId;
}
}