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