summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStas Negara <snegara@google.com>2015-03-11 14:03:47 -0700
committerStas Negara <snegara@google.com>2015-03-11 15:20:56 -0700
commit703cfcd68fef032d3a3e3143c41dfd49c44689d6 (patch)
treebc230140d792693fda5740f0df07cfce81b6ac84
parent7ee89a4bb71e07c721de8774da39462ee04b7052 (diff)
downloadtesting-703cfcd68fef032d3a3e3143c41dfd49c44689d6.tar.gz
Match loading and no image sizes with the expected image size. Do not redundantly load duplicated images.gradle_1.2.3gradle_1.2.2gradle_1.2.1gradle_1.2.0-rc1gradle_1.2.0-beta1gradle_1.2.0studio-1.2-releasestudio-1.2-dev
Change-Id: I894cb84bd21f7324a4081dcd1edbdef51c95b224
-rw-r--r--src/com/google/gct/testing/LoadingLandscape.pngbin0 -> 8430 bytes
-rw-r--r--src/com/google/gct/testing/LoadingPortrait.pngbin6755 -> 8090 bytes
-rw-r--r--src/com/google/gct/testing/NoImage.pngbin106807 -> 0 bytes
-rw-r--r--src/com/google/gct/testing/NoImageLandscape.pngbin0 -> 103441 bytes
-rw-r--r--src/com/google/gct/testing/NoImagePortrait.pngbin0 -> 112655 bytes
-rw-r--r--src/com/google/gct/testing/ScreenshotComparisonDialog.java19
-rw-r--r--src/com/google/gct/testing/ScreenshotComparisonPanel.java91
7 files changed, 84 insertions, 26 deletions
diff --git a/src/com/google/gct/testing/LoadingLandscape.png b/src/com/google/gct/testing/LoadingLandscape.png
new file mode 100644
index 0000000..6f5b534
--- /dev/null
+++ b/src/com/google/gct/testing/LoadingLandscape.png
Binary files differ
diff --git a/src/com/google/gct/testing/LoadingPortrait.png b/src/com/google/gct/testing/LoadingPortrait.png
index c7233a6..7f8be0e 100644
--- a/src/com/google/gct/testing/LoadingPortrait.png
+++ b/src/com/google/gct/testing/LoadingPortrait.png
Binary files differ
diff --git a/src/com/google/gct/testing/NoImage.png b/src/com/google/gct/testing/NoImage.png
deleted file mode 100644
index e09c708..0000000
--- a/src/com/google/gct/testing/NoImage.png
+++ /dev/null
Binary files differ
diff --git a/src/com/google/gct/testing/NoImageLandscape.png b/src/com/google/gct/testing/NoImageLandscape.png
new file mode 100644
index 0000000..021f6bd
--- /dev/null
+++ b/src/com/google/gct/testing/NoImageLandscape.png
Binary files differ
diff --git a/src/com/google/gct/testing/NoImagePortrait.png b/src/com/google/gct/testing/NoImagePortrait.png
new file mode 100644
index 0000000..09a60a8
--- /dev/null
+++ b/src/com/google/gct/testing/NoImagePortrait.png
Binary files differ
diff --git a/src/com/google/gct/testing/ScreenshotComparisonDialog.java b/src/com/google/gct/testing/ScreenshotComparisonDialog.java
index b406165..9d8d76d 100644
--- a/src/com/google/gct/testing/ScreenshotComparisonDialog.java
+++ b/src/com/google/gct/testing/ScreenshotComparisonDialog.java
@@ -104,14 +104,14 @@ public class ScreenshotComparisonDialog {
populateHeaderPanel();
- addScreenshotComparisonPanel(configurationInstance);
+ createFirstScreenshotComparisonPanel(configurationInstance);
addScreenshotPanel = new AddCompareScreenshotPanel();
//addScreenshotPanel.setHeight(UIUtil.isUnderDarcula() ? 585 : 570);
addScreenshotPanel.addListener(new AddScreenshotListener() {
@Override
public void addScreenshot() {
- createNewScreenshotComparisonPanel(screenshotPanels.get(screenshotPanels.size() - 1));
+ addScreenshotComparisonPanel(screenshotPanels.get(screenshotPanels.size() - 1));
}
});
@@ -157,10 +157,10 @@ public class ScreenshotComparisonDialog {
return myWindow;
}
- private void addScreenshotComparisonPanel(ConfigurationInstance configurationInstance) {
+ private void createFirstScreenshotComparisonPanel(ConfigurationInstance configurationInstance) {
ScreenshotComparisonPanel screenshotComparisonPanel =
- new ScreenshotComparisonPanel(this, testTreeRoot, configuration, configurationInstance, (TestName)myTestComboBox.getSelectedItem(),
- step, results);
+ new ScreenshotComparisonPanel(this, null, testTreeRoot, configuration, configurationInstance,
+ (TestName)myTestComboBox.getSelectedItem(), step, results);
screenshotPanels.add(screenshotComparisonPanel);
WipePanel wipePanel = screenshotComparisonPanel.getPanel();
myAllScreenshotsPanel.add(wipePanel);
@@ -262,14 +262,15 @@ public class ScreenshotComparisonDialog {
myIncrementStepButton.setEnabled(step < maxStep);
}
- public void createNewScreenshotComparisonPanel(ScreenshotComparisonPanel createAfterPanel) {
+ public void addScreenshotComparisonPanel(ScreenshotComparisonPanel createAfterPanel) {
int index = 0;
for (Component component : myAllScreenshotsPanel.getComponents()) {
if (component == createAfterPanel.getPanel()) {
ScreenshotComparisonPanel screenshotComparisonPanel =
- new ScreenshotComparisonPanel(this, testTreeRoot, configuration, createAfterPanel.computeSelectedConfigurationInstance(),
- (TestName)myTestComboBox.getSelectedItem(), step, results);
- screenshotPanels.add(screenshotComparisonPanel);
+ new ScreenshotComparisonPanel(this, createAfterPanel, testTreeRoot, configuration,
+ createAfterPanel.computeSelectedConfigurationInstance(), (TestName)myTestComboBox.getSelectedItem(),
+ step, results);
+ screenshotPanels.add(index + 1, screenshotComparisonPanel);
updateMaxStep();
WipePanel newPanel = screenshotComparisonPanel.getPanel();
myAllScreenshotsPanel.add(newPanel, index + 1);
diff --git a/src/com/google/gct/testing/ScreenshotComparisonPanel.java b/src/com/google/gct/testing/ScreenshotComparisonPanel.java
index e84d9b8..c52a06f 100644
--- a/src/com/google/gct/testing/ScreenshotComparisonPanel.java
+++ b/src/com/google/gct/testing/ScreenshotComparisonPanel.java
@@ -15,11 +15,13 @@
*/
package com.google.gct.testing;
+import com.android.annotations.Nullable;
import com.google.common.base.Function;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.gct.testing.dimension.CloudTestingType;
import com.google.gct.testing.dimension.GoogleCloudTestingDimension;
+import com.google.gct.testing.dimension.OrientationDimension;
import com.google.gct.testing.results.GoogleCloudTestProxy;
import com.google.gct.testing.ui.CopyImageToClipboard;
import com.google.gct.testing.ui.Tab;
@@ -28,6 +30,7 @@ import com.google.gct.testing.ui.WipePanel;
import com.intellij.execution.testframework.AbstractTestProxy;
import com.intellij.openapi.fileChooser.FileSaverDescriptor;
import com.intellij.openapi.fileChooser.ex.FileSaverDialogImpl;
+import com.intellij.openapi.util.Pair;
import com.intellij.openapi.vfs.VirtualFileWrapper;
import com.intellij.util.ui.UIUtil;
@@ -51,6 +54,8 @@ import static java.awt.Color.BLACK;
public class ScreenshotComparisonPanel implements ScreenshotComparisonHeaderPanelListener, ConfigurationResultListener {
+ private enum StaticImageKind {LOADING, NO_IMAGE};
+
public static final Function<GoogleCloudTestingTypeSelection, CloudTestingType> GET_SELECTED_TYPE = new Function<GoogleCloudTestingTypeSelection, CloudTestingType>() {
@Override
public CloudTestingType apply(GoogleCloudTestingTypeSelection input) {
@@ -82,22 +87,30 @@ public class ScreenshotComparisonPanel implements ScreenshotComparisonHeaderPane
private static final int MAX_IMAGE_WIDTH = 533;
private static final int MAX_IMAGE_HEIGHT = 533;
- private static final int NO_IMAGE_WIDTH = 300;
+ private static final int PORTRAIT_WIDTH = 300;
+ private static final int LANDSCAPE_HEIGHT = 300;
//private static final int IMAGE_WIDTH = 300;
//private static int imageHeight = 550;
- private static final BufferedImage NO_IMAGE;
+ private static final BufferedImage NO_IMAGE_PORTRAIT;
+ private static final BufferedImage NO_IMAGE_LANSCAPE;
private static final BufferedImage LOADING_PORTRAIT;
+ private static final BufferedImage LOADING_LANDSCAPE;
private UpdateImageThread updateImageThread;
private final Object lock;
+ private boolean isLoaded;
static {
try {
- NO_IMAGE = ImageIO.read(ScreenshotComparisonPanel.class.getResourceAsStream("NoImage.png"));
- NO_IMAGE.flush();
+ NO_IMAGE_PORTRAIT = ImageIO.read(ScreenshotComparisonPanel.class.getResourceAsStream("NoImagePortrait.png"));
+ NO_IMAGE_PORTRAIT.flush();
+ NO_IMAGE_LANSCAPE = ImageIO.read(ScreenshotComparisonPanel.class.getResourceAsStream("NoImageLandscape.png"));
+ NO_IMAGE_LANSCAPE.flush();
LOADING_PORTRAIT = ImageIO.read(ScreenshotComparisonPanel.class.getResourceAsStream("LoadingPortrait.png"));
LOADING_PORTRAIT.flush();
+ LOADING_LANDSCAPE = ImageIO.read(ScreenshotComparisonPanel.class.getResourceAsStream("LoadingLandscape.png"));
+ LOADING_PORTRAIT.flush();
}
catch (IOException e) {
throw new RuntimeException(e);
@@ -106,12 +119,18 @@ public class ScreenshotComparisonPanel implements ScreenshotComparisonHeaderPane
private BufferedImage currentImage;
+ private Icon referenceIcon = null;
+
- public ScreenshotComparisonPanel(ScreenshotComparisonDialog parent, AbstractTestProxy testTreeRoot, CloudTestConfigurationImpl configuration,
+ public ScreenshotComparisonPanel(ScreenshotComparisonDialog parent, @Nullable ScreenshotComparisonPanel clonedPanel,
+ AbstractTestProxy testTreeRoot, CloudTestConfigurationImpl configuration,
ConfigurationInstance configurationInstance, TestName currentTest, int currentStep,
Map<String, ConfigurationResult> results) {
lock = this;
this.parent = parent;
+ if (clonedPanel != null) {
+ referenceIcon = clonedPanel.myImageLabel.getIcon();
+ }
this.testTreeRoot = testTreeRoot;
this.configuration = configuration;
selectedConfigurationInstance = configurationInstance;
@@ -127,10 +146,10 @@ public class ScreenshotComparisonPanel implements ScreenshotComparisonHeaderPane
}
//TODO: Dispose to avoid memory leak.
- init();
+ init(clonedPanel);
}
- public void init() {
+ public void init(@Nullable ScreenshotComparisonPanel clonedPanel) {
if (UIUtil.isUnderDarcula()) {
myConfigurationChooserPanel.setBackground(CloudTestingUtils.makeDarker(UIUtil.getPanelBackground(), 1));
}
@@ -156,7 +175,7 @@ public class ScreenshotComparisonPanel implements ScreenshotComparisonHeaderPane
bagConstraints.ipadx = 5;
int index = 0;
- for (GoogleCloudTestingDimension dimension : configuration.getDimensions()) {
+ for (final GoogleCloudTestingDimension dimension : configuration.getDimensions()) {
JLabel label = new JLabel(dimension.getIcon());
label.setToolTipText(dimension.getDisplayName());
@@ -188,9 +207,13 @@ public class ScreenshotComparisonPanel implements ScreenshotComparisonHeaderPane
currentConfigurationResult.addConfigurationResultListener(thisPanel);
}
updateHeaderBar();
+ if (dimension instanceof OrientationDimension) {
+ referenceIcon = null;
+ } else {
+ referenceIcon = myImageLabel.getIcon();
+ }
updateImage();
parent.updateMaxStep();
- parent.fitWindow();
}
});
@@ -219,7 +242,13 @@ public class ScreenshotComparisonPanel implements ScreenshotComparisonHeaderPane
myImagePanel.add(myImageLabel, BorderLayout.CENTER);
updateHeaderBar();
- updateImage();
+
+ if (clonedPanel != null && clonedPanel.isLoaded) {
+ myImageLabel.setIcon(clonedPanel.myImageLabel.getIcon());
+ isLoaded = true;
+ } else {
+ updateImage();
+ }
}
public int getMaxStep() {
@@ -229,22 +258,44 @@ public class ScreenshotComparisonPanel implements ScreenshotComparisonHeaderPane
private void updateImage() {
synchronized (lock) {
+ isLoaded = false;
if (updateImageThread != null) {
updateImageThread.makeObsolete();
}
ConfigurationResult selectedConfigurationResult = getSelectedConfigurationResult();
if (selectedConfigurationResult == null) {
- myImageLabel.setIcon(new ImageIcon(NO_IMAGE.getScaledInstance(NO_IMAGE_WIDTH, MAX_IMAGE_HEIGHT, Image.SCALE_SMOOTH)));
- parent.fitWindow();
+ setStaticImage(StaticImageKind.NO_IMAGE);
return;
}
- myImageLabel.setIcon(new ImageIcon(LOADING_PORTRAIT.getScaledInstance(NO_IMAGE_WIDTH, MAX_IMAGE_HEIGHT, Image.SCALE_SMOOTH)));
- parent.fitWindow();
+ setStaticImage(StaticImageKind.LOADING);
updateImageThread = new UpdateImageThread(currentTest, currentStep, selectedConfigurationResult);
updateImageThread.start();
}
}
+ private void setStaticImage(StaticImageKind imageKind) {
+ BufferedImage staticImage = imageKind == StaticImageKind.LOADING
+ ? (isPortrait() ? LOADING_PORTRAIT : LOADING_LANDSCAPE)
+ : (isPortrait() ? NO_IMAGE_PORTRAIT : NO_IMAGE_LANSCAPE);
+ Pair<Integer, Integer> imageSize = getStaticImageSize();
+ myImageLabel.setIcon(new ImageIcon(staticImage.getScaledInstance(imageSize.getFirst(), imageSize.getSecond(), Image.SCALE_SMOOTH)));
+ isLoaded = imageKind != StaticImageKind.LOADING;
+ parent.fitWindow();
+ }
+
+ /**
+ * Returns a pair of (width, height).
+ */
+ private Pair<Integer, Integer> getStaticImageSize() {
+ if (referenceIcon != null) {
+ return new Pair(referenceIcon.getIconWidth(), referenceIcon.getIconHeight());
+ }
+ if (isPortrait()) {
+ return new Pair(PORTRAIT_WIDTH, MAX_IMAGE_HEIGHT);
+ }
+ return new Pair(MAX_IMAGE_WIDTH, LANDSCAPE_HEIGHT);
+ }
+
private class UpdateImageThread extends Thread {
private final TestName test;
@@ -284,8 +335,7 @@ public class ScreenshotComparisonPanel implements ScreenshotComparisonHeaderPane
}
currentImage = loadedImage;
if (currentImage == null) {
- myImageLabel.setIcon(new ImageIcon(NO_IMAGE.getScaledInstance(NO_IMAGE_WIDTH, MAX_IMAGE_HEIGHT, Image.SCALE_SMOOTH)));
- parent.fitWindow();
+ setStaticImage(StaticImageKind.NO_IMAGE);
return;
}
@@ -314,6 +364,7 @@ public class ScreenshotComparisonPanel implements ScreenshotComparisonHeaderPane
imageHeight = MAX_IMAGE_HEIGHT;
}
myImageLabel.setIcon(new ImageIcon(currentImage.getScaledInstance(imageWidth, imageHeight, Image.SCALE_SMOOTH)));
+ isLoaded = true;
parent.fitWindow();
}
}
@@ -368,7 +419,7 @@ public class ScreenshotComparisonPanel implements ScreenshotComparisonHeaderPane
@Override
public void openEvent() {
- parent.createNewScreenshotComparisonPanel(thisPanel);
+ parent.addScreenshotComparisonPanel(thisPanel);
}
@Override
@@ -425,6 +476,10 @@ public class ScreenshotComparisonPanel implements ScreenshotComparisonHeaderPane
return results.get(selectedConfigurationInstance.getEncodedString());
}
+ private boolean isPortrait() {
+ return selectedConfigurationInstance.getEncodedString().endsWith("portrait");
+ }
+
public void stopListeningToResults() {
ConfigurationResult selectedConfigurationResult = getSelectedConfigurationResult();
if (selectedConfigurationResult != null ) {
@@ -445,6 +500,7 @@ public class ScreenshotComparisonPanel implements ScreenshotComparisonHeaderPane
currentTest = test;
if (shouldUpdateImage) {
updateHeaderBar();
+ referenceIcon = myImageLabel.getIcon();
updateImage();
}
}
@@ -453,6 +509,7 @@ public class ScreenshotComparisonPanel implements ScreenshotComparisonHeaderPane
public void updateStep(int step, boolean shouldUpdateImage) {
currentStep = step;
if (shouldUpdateImage) {
+ referenceIcon = myImageLabel.getIcon();
updateImage();
}
}