/* * 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; } }